@ConfigurationProperties實現自定義配置綁定



@ConfigurationProperties使用


創建一個類,類名上方注解,配置prefix屬性,如下代碼:

@ConfigurationProperties(
        prefix = "hello.properties"
)
public class MyProperties {

    private String myKey;
    private List<String> stringList;
    private Duration duration;

    public String getMyKey() {
        return myKey;
    }

    public void setMyKey(String myKey) {
        this.myKey = myKey;
    }

    public List<String> getStringList() {
        return stringList;
    }

    public void setStringList(List<String> stringList) {
        this.stringList = stringList;
    }

    public Duration getDuration() {
        return duration;
    }

    public void setDuration(Duration duration) {
        this.duration = duration;
    }

    @Override
    public String toString() {
        return "MyProperties{" +
                "myKey='" + myKey + '\'' +
                ", stringList=" + stringList +
                ", duration=" + duration +
                '}';
    }
}

prefix屬性是配置文件里的前綴,即配置文件中以前綴 + 變量名的形式配置一條記錄,來對應類中的一個變量,如下:

hello.properties.myKey=hello
hello.properties.duration=20s
hello.properties.string-list[0]=Acelin
hello.properties.string-list[1]=nice

@ConfigurationProperties特點



寬松綁定

如下配置都是可以被識別綁定的:

hello.properties.myKey=hello
hello.properties.mykey=hello
hello.properties.my-key=hello
hello.properties.my_key=hello
hello.properties.MY_KEY=hello
hello.properties.MY-KEY=hello

支持復雜屬性類型
  • 支持從配置參數中解析 durations (持續時間)
hello.properties.duration=20s
  • List 和 Set
hello.properties.string-list[0]=Acelin
hello.properties.string-list[1]=nice

激活@ConfigurationProperties



通過@EnableConfigurationProperties

如果一個配置類只單單用@ConfigurationProperties注解,那么在IOC容器中是獲取不到properties 配置文件轉化的bean。我們可以在想要使用該配置類的類上注解@EnableConfigurationProperties,並配置相關的類,即可拿到該裝配好配置的類了。如下所示:


通過@ConfigurationPropertiesScan

該注解有點類似與@CompomentScan注解掃描@Compoment注釋的類相似,也是用來掃描項目中@ConfigurationProperties注解的類,並注入spring容器中。只需將該注解注釋於項目啟動類上即可

其實@ConfigurationProperties更多的作用是將配置文件中的配置與類中變量對應上來,而上述兩種方式是告訴Spring容器要把這個有配置特性的Bean在程序啟動的時候給創建出來。那談到的創建Bean,我們就會想到Spring創建Bean的各種方式,這些方式的同樣能夠激活@ConfigurationProperties,詳細請看Spring Boot創建Bean的幾種方式


@ConfigurationProperties與@Value對比


- @ConfigurationProperties @Value
功能 批量注入配置文件中的屬性 一個個指定
松散綁定(松散語法) 支持 不支持
SpEL 不支持 支持
JSR303數據效驗 支持 不支持
復雜類型封裝 支持 不支持

使用 Spring Boot Configuration Processor 完成自動補全


當我們在配置文件中寫官方支持的配置的時候,我們都會發現的有自動補全配置的一個功能,那怎么也讓我們自己的配置也實現這種功能呢?

其實當你用這個注解的時候,IDE是會提示你這一點的,她會在文件的上方提示你要可以配置自動補全的功能:

image

實現的方式就是項目導入依賴:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
        </dependency>

然后重新編譯或運行項目:

項目會生產一個json文件

image

然后能夠實現自動提示補全配置項的功能了

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM