spring-boot读取props和yml配置文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring-boot读取props和yml配置文件相关的知识,希望对你有一定的参考价值。

最近微框架spring-boot很火,笔者也跟风学习了一下,废话不多说,现给出一个读取配置文件的例子。 
首先,需要在pom文件中依赖以下jar包 

Java代码  

  1. <dependencies>  

  2.     <dependency>  

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

  4.         <artifactId>spring-boot-starter-web</artifactId>  

  5.     </dependency>       

  6.     <dependency>  

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

  8.         <artifactId>spring-boot-starter-test</artifactId>  

  9.         <scope>test</scope>  

  10.     </dependency>  

  11. </dependencies>  


其次,我们需要一个spring-boot启动类 下载

Java代码  

  1. @SpringBootApplication  

  2. @EnableConfigurationProperties({PropsConfig.class,YmlConfig.class})   

  3. public class ReadApplication {  

  4.     public static void main(String[] args) {  

  5.         SpringApplication.run(ReadApplication.class, args);  

  6.     }  

  7. }  


没错,@EnableConfigurationProperties注解里指出的PropsConfig.class,YmlConfig.class分别就是读取props和yml配置文件的类。接下来,我们分别进行读取properties和yml配置文件的具体实现。 

1.读取properties配置文件 
在类路径下放置一个application.properties文件,大致内容如下: 下载

Java代码  

  1. master.ds.driverClassName=com.mysql.jdbc.Driver  

  2. master.ds.url=jdbc:mysql://localhost:3306/test  

  3. master.ds.username=root  

  4. master.ds.password=root  

  5. master.ds.filters=stat  

  6. master.ds.maxActive=20  

  7. master.ds.initialSize=1  

  8. master.ds.maxWait=60000  

  9. master.ds.minIdle=10  

  10. master.ds.timeBetweenEvictionRunsMillis=60000  

  11. master.ds.minEvictableIdleTimeMillis=300000  

  12. master.ds.validationQuery=SELECT ‘x‘  

  13. master.ds.testWhileIdle=true  

  14. master.ds.testOnBorrow=false  

  15. master.ds.testOnReturn=false  

  16. master.ds.poolPreparedStatements=true  

  17. master.ds.maxOpenPreparedStatements=100  

  18. master.ds.removeAbandoned=true  

  19. master.ds.removeAbandonedTimeout=1800  

  20. master.ds.logAbandoned=true  


读取props配置的类,很简单,基本就是一个pojo/vo类,在类上加载@ConfigurationProperties注解即可。 

Java代码  下载

  1. @ConfigurationProperties(prefix = "master.ds",locations = "classpath:application.properties")  

  2. public class PropsConfig {  

  3.     private String driverClassName;  

  4.     private String url;  

  5.     private String username;  

  6.     private String password;  

  7.     private String filters;  

  8.     private String maxActive;  

  9.     private String initialSize;  

  10.     private String maxWait;  

  11.           

  12.     public String getDriverClassName() {  

  13.         return driverClassName;  

  14.     }  

  15.     public void setDriverClassName(String driverClassName) {  

  16.         this.driverClassName = driverClassName;  

  17.     }  

  18.     public String getUrl() {  

  19.         return url;  

  20.     }  

  21.     public void setUrl(String url) {  

  22.         this.url = url;  

  23.     }  

  24.     public String getUsername() {  

  25.         return username;  

  26.     }  

  27.     public void setUsername(String username) {  

  28.         this.username = username;  

  29.     }  

  30.     public String getPassword() {  

  31.         return password;  

  32.     }  

  33.     public void setPassword(String password) {  

  34.         this.password = password;  

  35.     }  

  36.     public String getFilters() {  

  37.         return filters;  

  38.     }  

  39.     public void setFilters(String filters) {  

  40.         this.filters = filters;  

  41.     }  

  42.     public String getMaxActive() {  

  43.         return maxActive;  

  44.     }  

  45.     public void setMaxActive(String maxActive) {  

  46.         this.maxActive = maxActive;  

  47.     }  

  48.     public String getInitialSize() {  

  49.         return initialSize;  

  50.     }  

  51.     public void setInitialSize(String initialSize) {  

  52.         this.initialSize = initialSize;  

  53.     }  

  54.     public String getMaxWait() {  

  55.         return maxWait;  

  56.     }  

  57.     public void setMaxWait(String maxWait) {  

  58.         this.maxWait = maxWait;  

  59.     }  

  60. }  



单元测试类 

Java代码  下载

  1. @RunWith(SpringJUnit4ClassRunner.class)  

  2. @SpringBootTest(classes = ReadApplication.class)  

  3. public class ReadApplicationPropsTests {  

  4.     @Autowired  

  5.     private PropsConfig propsConfig;  

  6.       

  7.     @Test  

  8.     public void testDisplayPropsValue() {  

  9.         String driverClassName = propsConfig.getDriverClassName();  

  10.         String url = propsConfig.getUrl();  

  11.         String username = propsConfig.getUsername();  

  12.         String password = propsConfig.getPassword();  

  13.           

  14.         String filters = propsConfig.getFilters();  

  15.         String maxActive = propsConfig.getMaxActive();  

  16.         String initialSize = propsConfig.getInitialSize();  

  17.         String maxWait = propsConfig.getMaxWait();  

  18.                   

  19.         System.out.println("driverClassName -> " + driverClassName);  

  20.         System.out.println("url -> " + url);  

  21.         System.out.println("username -> " + username);  

  22.         System.out.println("password -> " + password);  

  23.           

  24.         System.out.println("initialSize -> " + initialSize);  

  25.         System.out.println("maxWait -> " + maxWait);  

  26.           

  27.     }  

  28. }  


可以看到在控制台输出的测试内容: 

Java代码  

  1. driverClassName -> com.mysql.jdbc.Driver  

  2. url -> jdbc:mysql://localhost:3306/test  

  3. username -> root  

  4. password -> root  

  5. initialSize -> 1  

  6. maxWait -> 60000  



2.读取yml配置文件 
在类路径下放置一个application.yml文件下载,大致内容如下: 

Java代码  

  1. myProps: #自定义的属性和值  

  2.   simpleProp: simplePropValue  

  3.   arrayProps: 1,2,3,4,5  

  4.   listProp1:  

  5.     - name: abc  

  6.       value: abcValue  

  7.     - name: efg  

  8.       value: efgValue  

  9.   listProp2:  

  10.     - config2Value1  

  11.     - config2Vavlue2  

  12.   mapProps:  

  13.     key1: value1  

  14.     key2: value2  



读取yml配置文件的类。 

Java代码  

  1. @ConfigurationProperties(prefix="myProps"//application.yml中的myProps下的属性    

  2. public class YmlConfig {  

  3.     private String simpleProp;    

  4.     private String[] arrayProps;    

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

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

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

  8.         

  9.     public String getSimpleProp() {    

  10.         return simpleProp;    

  11.     }    

  12.         

  13.     public void setSimpleProp(String simpleProp) {    

  14.         this.simpleProp = simpleProp;    

  15.     }    

  16.         

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

  18.         return listProp1;    

  19.     }    

  20.     public List<String> getListProp2() {    

  21.         return listProp2;    

  22.     }    

  23.     

  24.     public String[] getArrayProps() {    

  25.         return arrayProps;    

  26.     }    

  27.     

  28.     public void setArrayProps(String[] arrayProps) {    

  29.         this.arrayProps = arrayProps;    

  30.     }    

  31.     

  32.     public Map<String, String> getMapProps() {    

  33.         return mapProps;    

  34.     }    

  35.     

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

  37.         this.mapProps = mapProps;    

  38.     }   

  39. }  



单元测试类 

Java代码  下载

  1. @RunWith(SpringJUnit4ClassRunner.class)  

  2. @SpringBootTest(classes = ReadApplication.class)  

  3. public class ReadApplicationYmlTests {  

  4.     @Autowired  

  5.     private YmlConfig ymlConfig;  

  6.       

  7.     @Test  

  8.     public void testDisplayYmlValue() throws JsonProcessingException {  

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

  10.           

  11.         ObjectMapper objectMapper = new ObjectMapper();  

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

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

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

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

  16.   

  17.     }  

  18. }  



可以看到在控制台输出的测试内容: 

Java代码  

  1. simpleProp: simplePropValue  

  2. arrayProps: ["1","2","3","4","5"]  

  3. listProp1: [{"name":"abc","value":"abcValue"},{"name":"efg","value":"efgValue"}]  

  4. listProp2: ["config2Value1","config2Vavlue2"]  

  5. mapProps: {"key1":"value1","key2":"value2"}  



以上是关于spring-boot读取props和yml配置文件的主要内容,如果未能解决你的问题,请参考以下文章

spring-boot结合maven配置不同环境的profile

IntelliJ IDEA 2017版 spring-boot2.0.4的yml配置使用

spring-boot配置文件使用

如何在 spring-boot 配置中加载 application.yaml 配置以进行硒测试

spring-boot 速成 profile区分环境

spring-boot中如何配置tomcat访问日志的位置和名称?