1. 技術(shù)目標(biāo)
- 目標(biāo)01:傳統(tǒng)的屬性配置:@value注解
- 目標(biāo)02:認(rèn)識Spring Boot中優(yōu)雅的屬性配置
- 目標(biāo)03:第一個(gè)Spring Boot中優(yōu)雅的屬性配置
- 目標(biāo)04:@ConfigurationProperties注解
2. 技術(shù)介紹
在開發(fā)的過程中,我們?yōu)榱烁綦x環(huán)境的差異,通常需要使用一些配置文件,Spring 提供了一些組件,使得使用配置文件的工作變得更加方便。@ConfigurationProperties 和 @Value都是 Spring 提供的用于從配置文件注入配置信息的方式。很顯然,@Value 比較適用于配置比較少的場景,而 @ConfigurationProperties 則更適用于有很多配置的情況。本篇文章引導(dǎo)你通過Spring Boot優(yōu)雅的屬性配置來配置項(xiàng)目中的配置屬性,可以更加靈活的配置項(xiàng)目中的配置項(xiàng),話不多說直接上干貨!
3. 環(huán)境配置
3.1 開發(fā)配置
- JDK
- Maven
- Eclipse&STS&IDEA
此案例使用IDEA作為開發(fā)工具!
3.2 技術(shù)棧
- Spring Boot
4. 技術(shù)實(shí)踐
4.1 項(xiàng)目搭建
此處不詳細(xì)講解如果對Spring Boot項(xiàng)目創(chuàng)建有問題的,可以參考第一章:用一個(gè)HelloWord來闡述SpringBoot的簡單與快速。
4.2 添加項(xiàng)目依賴
<!-- 支持 @ConfigurationProperties 注解 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
4.3 傳統(tǒng)的屬性配置
@Value 比較適用于配置比較少的場景,但是對于屬性很多的配置不太適合!
4.3.1 配置屬性文件
# 傳統(tǒng)方式的屬性配置
guod.info.value.port=1111
guod.info.value.name=value
guod.info.value.age=22
4.3.2 注入屬性值
@Value("${guod.info.port}")
private String port;
@Value("${guod.info.name}")
private String name;
@Value("${guod.info.age}")
private String age;
4.3.3 業(yè)務(wù)使用
@GetMapping(value = "/value")
public String value() {
return port + name + age;
}
4.4 Boot中的屬性配置
4.4.1 創(chuàng)建屬性配置文件
myProps: #自定義的屬性和值
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
4.4.2 Bean接收配置信息
@Component
@ConfigurationProperties(prefix="myProps") //接收application.yml中的myProps下面的屬性
public class MyProps {
private 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 List<Map<String, String>> getListProp1() {
return listProp1;
}
public List<String> getListProp2() {
return listProp2;
}
public String[] getArrayProps() {
return arrayProps;
}
public void setArrayProps(String[] arrayProps) {
this.arrayProps = arrayProps;
}
public Map<String, String> getMapProps() {
return mapProps;
}
public void setMapProps(Map<String, String> mapProps) {
this.mapProps = mapProps;
}
}
4.4.3 業(yè)務(wù)使用
@Autowired
private MyProps myProps;
@GetMapping(value = "/index")
public String index() {
return userProperties.getName() + userProperties.getAge();
}
5. 技術(shù)總結(jié)
5.1 注意部分
@Configuration:標(biāo)記這是一個(gè)的配置類。
@ConfigurationProperties:這個(gè)注解 可以標(biāo)記在類上面 , 也可以標(biāo)記在方法上面,被這個(gè)注解修飾的類或方法 會(huì)被**ConfigurationPropertiesBeanRegistrar **這個(gè)類解析 , 并生成代理對象 。在使用這個(gè)標(biāo)簽的時(shí)候 , 我們可以通過 prefix 這個(gè)屬性 , 來對文件中前綴相同的配置進(jìn)行映射。這里需要注意的是 , 如果我們的key需要駝峰命名的話 , 需要通過 "-" 來進(jìn)行標(biāo)記 。
6. 源碼地址
本章以及后續(xù)章節(jié)的源碼地址我都會(huì)分享出來,請大家自行下載以及git clone。
SpringBoot相關(guān)系列文章請?jiān)L問:目錄:SpringBoot學(xué)習(xí)目錄
SpringBoot配套源碼地址:https://gitee.com/guod369/Guod-Boot
開源分享,共同進(jìn)步!