知識改變命運,擼碼使我快樂盟猖,2020繼續(xù)游走在開源界
點贊再看舰罚,養(yǎng)成習慣
給我來個Star吧,點擊了解下基于SpringBoot的組件化接口服務(wù)落地解決方案
概念
占位符
是一種靈活的配置方式憨栽,可以讓我們很靈活的使用配置參數(shù),@Value
注解的配置也是占位符的一種體現(xiàn)方式,這種方式可以從Environment
內(nèi)獲取對應(yīng)的配置值
屑柔。
推薦閱讀
配置方式
在application.yml/properties
配置文件內(nèi)可以直接使用占位符
來進行配置的相互引用屡萤,如下所示:
system:
name: ${spring.application.name}
spring:
application:
name: project-sample
在上面的配置中,name
配置直接引用了spring.application.name
的配置值掸宛,這樣我們在系統(tǒng)中通過@Value("${name}")
或者通過@ConfigurationProperties
方式使用時死陆,得到的值都為project-sample
。
// @Value方式
@Value("${system.name}")
private String name;
// @ConfigurationProperties方式
@Configuration
@ConfigurationProperties(prefix = "system")
static class LoadConfig {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
這樣方式極大地減少了相同的配置出現(xiàn)唧瘾,讓我們在
配置文件
中也可以實現(xiàn)類似于常量
的定義措译。
使用默認值
當我們使用@Value
注解來注入配置參數(shù)時,如果所引入的配置為NULL饰序,啟動項目時會拋出異常领虹,項目無法正常啟動,所以我們有必要添加一個默認值菌羽,如下所示:
system:
name: ${spring.application.name:default}
#spring:
# application:
# name: project-sample
在上面配置中把spring.application.name
注釋掉掠械,當我們使用${spring.application.name}
占位符時其實并未引用到有效的值,通過${xxx:defaultValue}
的形式可以配置默認值注祖,當占位符所引用的配置為NULL
時,將會使用默認值(默認值的類型要對配置匹配)均唉。
也可以通過@Value("${system.name:default}")
這種方式配置默認值是晨,不建議使用這種方式,默認值有變動時舔箭,我們還要一個一個修改罩缴,太麻煩了,不要給自己找事干...
當然對于配置的注入還是推薦使用
@ConfigurationProperties
层扶,完全遵循OOP
設(shè)計方式箫章,在應(yīng)用程序啟動時進行賦值,就算是引用的配置為NULL
沒有默認值镜会,也不會出現(xiàn)啟動異常的問題檬寂。
“短”命令行參數(shù)
如果你對命令行參數(shù)不熟悉,可以訪問 SpringBoot2.x基礎(chǔ)篇:靈活的使用外部化配置信息 學習戳表。
在實際部署應(yīng)用程序時桶至,有很多的配置是動態(tài)的,命令行
參數(shù)是一個不錯的方式匾旭,不過SpringBoot
所提供的配置參數(shù)名稱都比較長镣屹,對此我們完全可以利用占位符
配置方式實現(xiàn)自定義。
占位符
是從Environment
內(nèi)讀取對應(yīng)的配置值价涝,而命令行參數(shù)
在應(yīng)用程序啟動時會被一并加入到Environment
中女蜈,因此也就實現(xiàn)了占位符
動態(tài)配置,其實這個“短”的含義,是你定義的新的配置名稱比較短而已伪窖。
假設(shè)我們的端口號需要動態(tài)指定逸寓,配置文件中可以通過如下的方式配置:
server:
port: ${port:8080}
port
是我們定義的“短”占位符
,在應(yīng)用程序啟動時并未指定則使用默認值8080
惰许。
java -jar project-sample.jar --port=9090
通過--port=9090
命令行參數(shù)席覆,應(yīng)用程序啟動時端口號就變?yōu)榱?code>9090。