服务器之家

服务器之家 > 正文

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

时间:2020-09-09 13:39     来源/作者:彩虹过后的羽翼

(一)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!";
  }

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

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
最新idea2020注册码永久激活(激活到2100年)
最新idea2020注册码永久激活(激活到2100年) 2020-07-29
电视剧《琉璃》全集在线观看 琉璃美人煞1-59集免费观看地址
电视剧《琉璃》全集在线观看 琉璃美人煞1-59集免费观看地址 2020-08-12
返回顶部