一、自動配置介紹
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
本篇文章同步在個人公衆號: