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

来源:互联网 发布:windows重启数据库 编辑:程序博客网 时间:2024/06/04 21:54
最近微框架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的applicationContext.xml文件也可以顺利运行之。
2 0