SpringBoot学习:读取yml和properties文件的内容

转:https://www.cnblogs.com/tongxuping/p/7207814.html

一、在SpringBoot实现属性注入:

  1)、添加pom依赖jar包;

复制代码

1 <!-- 支持 @ConfigurationProperties 注解 -->  
2     <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-configuration-processor -->  
3     <dependency>  
4       <groupId>org.springframework.boot</groupId>  
5       <artifactId>spring-boot-configuration-processor</artifactId>  
6       <version>${spring-boot.version}</version>  
7     </dependency>  

复制代码

  2)、在yml配置文件中:

复制代码

 1 #pojo属性注入
 2 Mybar: #pojo中的prefix值
 3   name: 张三
 4   arrs: 赵,钱,孙,李
 5   nameList:
 6     - name: 刘
 7       value: 刘备
 8     - name: 张
 9       value: 张飞
10   BarNameList:
11   - 早退次数
12   - 迟到次数
13   - 旷工天数
14   map:
15     key1: 曹操
16     key2: 曹丕
17     key3: 曹植

复制代码

  3)、pojo通过set、get方法获取呀,yml中的值

复制代码

 1 package cn.com.venus.oa.pojo;
 2 
 3 import java.util.List;
 4 import java.util.Map;
 5 
 6 import org.springframework.beans.factory.annotation.Autowired;
 7 import org.springframework.beans.factory.annotation.Value;
 8 import org.springframework.boot.context.properties.ConfigurationProperties;
 9 import org.springframework.stereotype.Component;
10 
11 /**
12  * 加载yaml配置文件的方法
13  * spring-boot更新到1.5.2版本后locations属性无法使用
14  * @PropertySource注解只可以加载proprties文件,无法加载yaml文件
15  * 故现在把数据放到application.yml文件中,spring-boot启动时会加载
16  */
17 @Component
18 @ConfigurationProperties(prefix="Mybar")
19 public class Bar {
20     private String name;
21 
22     private String[] arrs;
23 
24     private List<Map<String,String>> nameList;
25     
26     private List<String> BarNameList;
27 
28     private Map<String,String> map;
29 
30     public String getName() {
31         return name;
32     }
33 
34     //String类型的一定需要setter来接收属性值;maps, collections, 和 arrays 不需要
35     public void setName(String name) {
36         this.name = name;
37     }
38 
39     public String[] getArrs() {
40         return arrs;
41     }
42 
43     public void setArrs(String[] arrs) {
44         this.arrs = arrs;
45     }
46 
47     public Map<String, String> getMap() {
48         return map;
49     }
50 
51     public void setMap(Map<String, String> map) {
52         this.map = map;
53     }
54 
55     public List<Map<String, String>> getNameList() {
56         return nameList;
57     }
58 
59     public void setNameList(List<Map<String, String>> nameList) {
60         this.nameList = nameList;
61     }
62 
63     public List<String> getBarNameList() {
64         return BarNameList;
65     }
66 
67     public void setBarNameList(List<String> barNameList) {
68         BarNameList = barNameList;
69     }
70 
71     
72 }

复制代码

  4)、最终在Controller中执行自动注入就可以完成yml配置属性值:

1 @Autowired
2 private  Bar bar;

二、properties配置文件:

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

复制代码

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注解

复制代码

 1 @Autowired  
 2     private Environment env;  
 3     @Value("${age}")  
 4     String name;  
 5   
 6   
 7     @RequestMapping("/")  
 8     @ResponseBody  
 9     String home(HttpServletRequest req) throws JsonProcessingException, UnsupportedEncodingException {  
10         logger.info("测试通过!!!");  
11         ObjectMapper objectMapper = new ObjectMapper();  
12         //测试加载yml文件  
13         System.out.println("simpleProp: " + config.getSimpleProp());  
14         System.out.println("arrayProps: " + objectMapper.writeValueAsString(config.getArrayProps()));  
15         System.out.println("listProp1: " + objectMapper.writeValueAsString(config.getListProp1()));  
16         System.out.println("listProp2: " + objectMapper.writeValueAsString(config.getListProp2()));  
17         System.out.println("mapProps: " + objectMapper.writeValueAsString(config.getMapProps()));  
18   
19         //测试加载properties文件  
20         System.out.println(env.getProperty("name"));//孙凯  
21         System.out.println(env.getProperty("abc"));//null  
22         System.out.println(name);//26  
23   
24         return "Hello World!";  
25     }  

猜你喜欢

转载自blog.csdn.net/majunzhu/article/details/83094608