說一個大家都知道的 Spring Boot 小技巧
小伙伴們都知道,在 Spring Boot 中,配置文件是 application.properties 或者 application.yaml,這個名為 application 的配置文件,無論是 properties 格式還是 yaml 格式,都會被 Spring Boot 容器自動加載。
然而很多時候我們會有一些額外的配置,這些額外的配置可能并非系統(tǒng)配置,所以我們不想將之放在 application.properties 或者 application.yaml 中,想搞一個單獨的配置文件來處理,這時候就分情況了。
1. properties
對于 properties 格式的配置文件,我們可以隨心所欲的自定義配置文件,例如在 resources 目錄下新建一個 data.properties 的配置文件用來配置數(shù)據(jù)庫的信息,像下面這樣:
db.username=root
db.password=123
db.url=jdbc:mysql:///vhr
然后在 Java 代碼中,利用 @PropertySource 和 @ConfigurationProperties 兩個注解來加載配置文件:
@PropertySource("classpath:data.properties")
@ConfigurationProperties(prefix = "db")
public class DbProperties {
private String username;
private String password;
private String url;
//省略 getter/setter
}
@PropertySource 就是用來加載一個自定義的 properties 配置文件,這是 Spring 中就有的功能,而不是 Spring Boot 的功能。
所以,如果你使用了 properties 格式的配置文件,那么就可以非常方便的實現(xiàn)自定義配置文件了,甚至可以將不同的配置文件分門別類,管理的井井有條。
問題實際上是出在 yaml 這一塊。
2. YAML
小伙伴們知道,對于 YAML 格式的配置而言,它其實是沒有一個類似于 @PropertySource 注解的東西的,也就是說 YAML 配置,你只能寫在 application.yaml 中,不能寫在其他地方。要是寫在其他地方,就沒法加載了,其實也不是沒法加載,可以自己調(diào)用 snakeyaml 包中的類去加載,但是那樣太費事了,所以我們期望能夠有一個簡便的辦法來做這件事。
怎么做呢?
我們可以利用 Spring Boot 中對于 profile 多環(huán)境的處理方式來加載自定義的 YAML 配置。
大家知道,Spring Boot 中對于多環(huán)境的處理方式非常方便,以 yaml 配置為例,我們只需要定義一個名為 application-{profile}.yaml 的配置文件,然后在 application.yaml 中就可以指定這個環(huán)境了,利用這個漏洞,就可以非常方便的加載自定義的 yaml 配置了,不過這種方式對自定義的 yaml 配置文件名格式有要求,就是必須是 application-{profile}.yaml 格式的。
我舉一個簡單例子吧,例如對于數(shù)據(jù)庫的配置,我想單獨搞一個配置文件,那么我們可以新建一個 application-data.yaml 的配置文件,內(nèi)容如下:
spring:
datasource:
password: 123
username: root
url: jdbc:mysql:///vhr
然后在 application.yaml 中就像設(shè)置環(huán)境一樣引入這個配置文件,如下:
spring:
profiles:
active: data
這樣就實現(xiàn)了對自定義 yaml 配置文件的加載。
如果有多個自定義的 yaml 配置,那么也可以一起加載,多個環(huán)境之間用 , 隔開即可。
just this。
小伙伴們都知道吧嘿嘿。