SpringBoot获取yml和properties配置文件的内容

2025-05-29 0 107

(一)yml配置文件

pom.xml加入依赖:

?

1

2

3

4

5

6

7
<!-- 支持 @ConfigurationProperties 注解 -->

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-configuration-processor -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-configuration-processor</artifactId>

<version>${spring-boot.version}</version>

</dependency>

在application.yml文件中加上:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15
#自定义的属性和值

myYml:

simpleProp: simplePropValue

arrayProps: 1,2,3,4,5

listProp1:

- name: abc

value: abcValue

- name: efg

value: efgValue

listProp2:

- config2Value1

- config2Vavlue2

mapProps:

key1: value1

key2: value2

使用一个java类获取yml文件的内容:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69
package com.sun.configuration;

import org.springframework.boot.context.properties.ConfigurationProperties;

import org.springframework.stereotype.Component;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

/**

* 加载yaml配置文件的方法

* Created by sun on 2017-1-15.

* spring-boot更新到1.5.2版本后locations属性无法使用

* @PropertySource注解只可以加载proprties文件,无法加载yaml文件

* 故现在把数据放到application.yml文件中,spring-boot启动时会加载

*/

@Component

//@ConfigurationProperties(locations = {"classpath:config/myProps.yml"},prefix = "myProps")

@ConfigurationProperties(prefix = "myYml")

public class YmlConfig {

String simpleProp;

private String[] arrayProps;

private List<Map<String, String>> listProp1 = new ArrayList<>(); //接收prop1里面的属性值

private List<String> listProp2 = new ArrayList<>(); //接收prop2里面的属性值

private Map<String, String> mapProps = new HashMap<>(); //接收prop1里面的属性值

public String getSimpleProp() {

return simpleProp;

}

//String类型的一定需要setter来接收属性值;maps, collections, 和 arrays 不需要

public void setSimpleProp(String simpleProp) {

this.simpleProp = simpleProp;

}

public String[] getArrayProps() {

return arrayProps;

}

public void setArrayProps(String[] arrayProps) {

this.arrayProps = arrayProps;

}

public List<Map<String, String>> getListProp1() {

return listProp1;

}

public void setListProp1(List<Map<String, String>> listProp1) {

this.listProp1 = listProp1;

}

public List<String> getListProp2() {

return listProp2;

}

public void setListProp2(List<String> listProp2) {

this.listProp2 = listProp2;

}

public Map<String, String> getMapProps() {

return mapProps;

}

public void setMapProps(Map<String, String> mapProps) {

this.mapProps = mapProps;

}

}

通过依赖注入就可以获取该对象:

?

1

2
@Autowired

private YmlConfig config;

方法内获取值:

?

1

2

3

4

5

6

7
ObjectMapper objectMapper = new ObjectMapper();

//测试加载yml文件

System.out.println("simpleProp: " + config.getSimpleProp());

System.out.println("arrayProps: " + objectMapper.writeValueAsString(config.getArrayProps()));

System.out.println("listProp1: " + objectMapper.writeValueAsString(config.getListProp1()));

System.out.println("listProp2: " + objectMapper.writeValueAsString(config.getListProp2()));

System.out.println("mapProps: " + objectMapper.writeValueAsString(config.getMapProps()));

(二)properties配置文件

使用@PropertySource注解加载配置文件,该注解无法加载yml配置文件。使用@Value注解获得文件中的参数值

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53
package com.sun.configuration;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.PropertySource;

import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;

/**

* 加载properties配置文件,在方法中可以获取

* abc.properties文件不存在,验证ignoreResourceNotFound属性

* 加上encoding = "utf-8"属性防止中文乱码,不能为大写的"UTF-8"

* Created by sun on 2017-3-30.

*/

@Configuration

@PropertySource(value = {"classpath:/config/propConfigs.properties","classpath:/config/abc.properties"},

ignoreResourceNotFound = true,encoding = "utf-8")

public class PropConfig {

// PropertySourcesPlaceholderConfigurer这个bean,

// 这个bean主要用于解决@value中使用的${…}占位符。

// 假如你不使用${…}占位符的话,可以不使用这个bean。

@Bean

public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {

return new PropertySourcesPlaceholderConfigurer();

}

}

//获取properties文件参数值有两种方法,一种获得Environment 的对象,第二种就是@Value注解

@Autowired

private Environment env;

@Value("${age}")

String name;

@RequestMapping("/")

@ResponseBody

String home(HttpServletRequest req) throws JsonProcessingException, UnsupportedEncodingException {

logger.info("测试通过!!!");

ObjectMapper objectMapper = new ObjectMapper();

//测试加载yml文件

System.out.println("simpleProp: " + config.getSimpleProp());

System.out.println("arrayProps: " + objectMapper.writeValueAsString(config.getArrayProps()));

System.out.println("listProp1: " + objectMapper.writeValueAsString(config.getListProp1()));

System.out.println("listProp2: " + objectMapper.writeValueAsString(config.getListProp2()));

System.out.println("mapProps: " + objectMapper.writeValueAsString(config.getMapProps()));

//测试加载properties文件

System.out.println(env.getProperty("name"));//孙凯

System.out.println(env.getProperty("abc"));//null

System.out.println(name);//26

return "Hello World!";

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 SpringBoot获取yml和properties配置文件的内容 https://www.kuaiidc.com/117666.html

相关文章

发表评论
暂无评论