SpringBoot獲取yml和properties配置文件的內(nèi)容
本文實(shí)例為大家分享了SpringBoot獲取yml和properties配置文件的具體代碼,供大家參考,具體內(nèi)容如下
(一)yml配置文件:
pom.xml加入依賴:
<!-- 支持 @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文件中加上:
#自定義的屬性和值 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文件的內(nèi)容:
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文件
* 故現(xiàn)在把數(shù)據(jù)放到application.yml文件中,spring-boot啟動時(shí)會加載
*/
@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;
}
}
通過依賴注入就可以獲取該對象:
@Autowired private YmlConfig config;
方法內(nèi)獲取值:
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注解獲得文件中的參數(shù)值
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文件不存在,驗(yàn)證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文件參數(shù)值有兩種方法,一種獲得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!";
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
教你用Java實(shí)現(xiàn)一個簡單的代碼生成器
今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著如何用Java實(shí)現(xiàn)一個簡單的代碼生成器展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06
java實(shí)現(xiàn)手機(jī)短信驗(yàn)證的基本思路
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)手機(jī)短信驗(yàn)證的基本思路,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11
Java concurrency之Condition條件_動力節(jié)點(diǎn)Java學(xué)院整理
Condition的作用是對鎖進(jìn)行更精確的控制。下面通過本文給大家分享Java concurrency之Condition條件的相關(guān)知識,非常不錯,具有參考借鑒價(jià)值,需要的朋友參考下吧2017-06-06
Springboot整個Quartz實(shí)現(xiàn)動態(tài)定時(shí)任務(wù)的示例代碼
這篇文章主要介紹了Springboot整個Quartz實(shí)現(xiàn)動態(tài)定時(shí)任務(wù)的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-09-09

