Spring Boot基礎(chǔ)之優(yōu)雅的屬性配置

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)步!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容