SpringBoot学习:读取yml和properties文件的内容
Posted 大圣
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot学习:读取yml和properties文件的内容相关的知识,希望对你有一定的参考价值。
一、在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 }
以上是关于SpringBoot学习:读取yml和properties文件的内容的主要内容,如果未能解决你的问题,请参考以下文章
springboot怎么读取application.yml文件