Spring Boot 的自動配置

一、自動配置介紹

        Spring Boot 提供了對應⽤進⾏⾃動化配置和提供了默認的配置,如默認的 Bean ,去運⾏ Spring 應⽤。它是⾮侵⼊式的,只提供⼀ 個默認實現,相⽐以前 XML 配置⽅式,很多顯式⽅式申明是不需要 的。⼤多數默認的配置⾜夠實現開發功能,從⽽更快速開發。但如果⾃動配置做的不夠 好,需要覆蓋配置。⽐如通過命令⾏動態指定某個 jar 的啓動端口、加載不同環境的配置等。
        那就要考慮到配置的優先級。 Spring Boot 不單單從 application.properties 獲取配置,所以我們可以在程序中多種設置配置屬性。按照以下列表的優先級排列:

1.命令⾏參數
2.java:comp/env ⾥的 JNDI 屬性
3.JVM 系統屬性
4.操作系統環境變量
5.RandomValuePropertySource 屬性類⽣成的 random.* 屬性
6.應⽤以外的 application.properties(或 yml)⽂件
7.打包在應⽤內的 application.properties(或 yml)⽂件
8.在應⽤ @Configuration 配置類中,⽤ @PropertySource 註解聲明的屬性⽂件
9.SpringApplication.setDefaultProperties 聲明的默認屬性

        利用配置的優先級屬性(命令⾏參數優先級最⾼),就可以快速地修改配置參數值,⽽不需要重新打包和部署應⽤。

⼆、⾃定義屬性示例

        在 application.properties 中對應 DemoProperties 對象字段編寫屬性的 KV 值:

## 示例屬性
demo.code=ABC
demo.name=甲乙丙
demo.desc=英文${demo.code} 中文${demo.name}

        然後,編寫對應的 DemoProperties Java 對象:

@Data
@NoArgsConstructor
@Component
@ConfigurationProperties(prefix = "demo")
public class DemoProperties {

    private String busiNo;

    private String code;

    private String orgCode;

}

        通過 @ConfigurationProperties(prefix = "demo”) 註解,將配置⽂件中以 demo 前綴的屬性值⾃動綁定 到對應的字段中。同是⽤ @Component 作爲 Bean 注⼊到 Spring 容器中。 如果不是⽤ application.properties ⽂件,⽽是⽤ application.yml 的⽂件,對應配置如下(鍵值對冒號後⾯,必須空⼀格):

## 示例屬性
demo:
    code: ABC
    name: 甲乙丙
    desc: 英文${demo.code} 中文${demo.name}

 

三、中文配置注意事項

注意事項一:
        application.properties 配置中⽂值的時候,讀取出來的屬性值會出現亂碼問題。但是 application.yml 不會出現亂碼問題。原因是,Spring Boot 是以 iso-8859 的編碼⽅式讀取 application.properties 配置 ⽂件。

注意事項二:
        如果定義⼀個鍵值對 user.name=xxx ,這⾥會讀取不到對應寫的屬性值。爲什麼呢?Spring Boot 的默 認 StandardEnvironment ⾸先將會加載 “systemEnvironment" 作爲⾸個PropertySource. ⽽ source 即 爲System.getProperties().當 getProperty時,按照讀取順序,返回 “systemEnvironment" 的值.即 System.getProperty("user.name") ,在Mac等非windows操作系統,會讀取到系統默認的登錄賬號等。
        這就是爲什麼,有些開發公司規範你,禁止直接不加前綴或公司縮寫,直接用 user 等字段,命名類或屬性等的原因之一。

--------------------------------------

版權聲明:本文爲【PythonJsGo】博主的原創文章,轉載請附上原文出處鏈接及本聲明。

博主主頁:https://my.oschina.net/u/3375733

本篇文章同步在個人公衆號:

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章