Spring?Boot各類變量的使用小結(jié)
1. 變量類型
- 操作系統(tǒng)環(huán)境變量
- JVM環(huán)境變量
- 配置文件變量
- 程序啟動(dòng)參數(shù)變量
2. 獲取變量
2.1 獲取方式
- @Value 注入獲取變量值
- System.genenv 獲取變量值
- System.getProperty 獲取變量值
- Environment 獲取變量值
- @ConfigurationProperties 獲取變量
- args 程序參數(shù)變量
2.2 獲取方法
2.2.1 通過(guò)@Value注入獲取變量值
@Value注入變量用于從SpringBoot項(xiàng)目Environment對(duì)象中獲取變量值,Environment 對(duì)象中的變量來(lái)源于配置文件,程序啟動(dòng)參數(shù)、JVM環(huán)境變量、操作系統(tǒng)環(huán)境變量。程序啟動(dòng)參數(shù)與配置文件中定義了相同的變量時(shí),程序啟動(dòng)參數(shù)將會(huì)覆蓋配置文件中變量的值。
@Value("${gateway.whitelist}")
private String[] whiteList;從配置文件中獲取變量值,如在 application.properties、bootstrap.yml 等定義好環(huán)境變量后,程序中可通過(guò) @Value 注入變量的方式獲取變量值。例如在 application.properties 中定義變量:
gateway.whitelist=/abc,/def
如果在JVM環(huán)境變量、操作系統(tǒng)環(huán)境變量、配置文件,程序啟動(dòng)參數(shù)中定義了相同的變量名,變量值的優(yōu)先級(jí)是:JVM環(huán)境變量 > 程序啟動(dòng)參數(shù) > 操作系統(tǒng)環(huán)境變量 > 配置文件參數(shù)
2.2.2 System.genenv 獲取變量值
System.getenv() 是 Java 內(nèi)置方法,用于獲取操作系統(tǒng)環(huán)境變量。
String password = System.getProperty("jasypt_encryptor_password");獲取操作系統(tǒng)環(huán)境變量,采用這種方式獲取 jasypt_encryptor_password 變量的值,一定要將這個(gè)變量在操作系統(tǒng)環(huán)境變量中定義,如果這個(gè)變量在 application.properties、bootstrap.yml 中定義則將無(wú)法被獲取。
在操作系統(tǒng)中定義環(huán)境變量時(shí),變量名中不能有 . 號(hào),例如 jasypt.encryptor.password 不能設(shè)置成操作系統(tǒng)的環(huán)境變量??梢允褂胈 來(lái)代替 . 號(hào)。
2.2.3 System.getProperty 獲取變量值
System.getProperty() 是Java 內(nèi)置方法,用于獲取JVM環(huán)境變量。
String password = System.getProperty("jasypt.encryptor.password");獲取JVM環(huán)境中的變量值,需要在JVM環(huán)境中定義 jasypt.encryptor.password 。通過(guò) java -jar 啟動(dòng) spring boot 程序時(shí),可通過(guò)使用 -Djasypt.encryptor.password=xxx 的方式設(shè)置JVM環(huán)境中的變量,示例如下:
java -jar -Djasypt.encryptor.password=xxx demo.jar
2.2.4 Environment 獲取變量值
從SpringBoot項(xiàng)目Environment對(duì)象中獲取變量值,Environment 對(duì)象中的變量來(lái)源于配置文件,程序啟動(dòng)參數(shù)、JVM環(huán)境變量、操作系統(tǒng)環(huán)境變量。程序啟動(dòng)參數(shù)與配置文件中定義了相同的變量時(shí),程序啟動(dòng)參數(shù)將會(huì)覆蓋配置文件中變量的值。
@Autowired
private Environment environment;
String password = environment.getProperty("jasypt.encryptor.password");如果操作系統(tǒng)環(huán)境變量中定義了 jasypt_encryptor_password 變量,則變量值為操作系統(tǒng)環(huán)境變量中的值,如果操作系統(tǒng)環(huán)境變量中未定義這個(gè)變量,則從配置文件(application.properties、bootstrap.yml)中獲取變量值。假設(shè) bootstrap.yml 中定義了
jasypt:
encryptor:
password: 123456789通過(guò) environment.getProperty("jasypt.encryptor.password") 將會(huì)獲取到變量的值為 123456789。
如果在JVM環(huán)境變量、操作系統(tǒng)環(huán)境變量、配置文件,程序啟動(dòng)參數(shù)中定義了相同的變量名,變量值的優(yōu)先級(jí)是:JVM環(huán)境變量 > 程序啟動(dòng)參數(shù) > 操作系統(tǒng)環(huán)境變量 > 配置文件參數(shù)
2.2.5 @ConfigurationProperties 獲取變量值
@Configuration
@ConfigurationProperties(prefix = "demo.kv")
@Data
public class AppSecurity {
private Map<String, String> apps;
}從配置文件(application.properties、bootstrap.yml)中獲取變量。在 bootstrap.yml 中定義變量:
demo:
kv:
apps:
key111: 1230678913234
key112: 12306789fdfdf42.2.6 SpringApplication.run 程序啟動(dòng)參數(shù)中獲取變量值
public static void main(String[] args) {
SpringApplication.run(BootstrapApplication.class, args);
for (String arg : args) {
System.out.println(arg);
}
}
// output: --demo.name=abc程序啟動(dòng)參數(shù)變量是程序啟動(dòng)時(shí)傳入的變量. java -jar 啟動(dòng)程序時(shí)使用 -- 傳入程序啟動(dòng)參數(shù)變量。例如在程序啟動(dòng)時(shí),傳入 demo.name 的變量:
java -jar demo.jar --demo.name=abc
采用這種方式定義變量后,這些參數(shù)會(huì)被添加到 Environment 環(huán)境變量中,如果在配置文件中已經(jīng)定義了 demo.name 變量,則通過(guò) --demo.name 變量將會(huì)覆蓋之前在配置文件中定義的變量值。例如:application.properties 中配置信息是:
demo.name=hello
程序啟動(dòng)時(shí)使用 java -jar demo.jar --demo.name=abc 啟動(dòng)程序,在程序中使用 Environment 對(duì)象獲取 demo.name 變量時(shí),獲取到的值是:abc
到此這篇關(guān)于Spring Boot各類變量的使用的文章就介紹到這了,更多相關(guān)Spring Boot變量使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java GraphQL數(shù)據(jù)加載器批處理的實(shí)現(xiàn)詳解
GraphQL 數(shù)據(jù)加載器是優(yōu)化 GraphQL API 的關(guān)鍵組件,旨在解決臭名昭著的 N+1 查詢問(wèn)題,在本中,我們將深入研究其批處理功能,感興趣的小伙伴可以了解下2023-12-12
Spring?Cloud?OpenFeign實(shí)例介紹使用方法
Spring?Cloud?OpenFeign?對(duì)?Feign?進(jìn)行了二次封裝,使得在?Spring?Cloud?中使用?Feign?的時(shí)候,可以做到使用?HTTP?請(qǐng)求訪問(wèn)遠(yuǎn)程服務(wù),就像調(diào)用本地方法一樣的,開(kāi)發(fā)者完全感知不到這是在調(diào)用遠(yuǎn)程訪問(wèn),更感知不到在訪問(wèn)?HTTP?請(qǐng)求2022-09-09
Java讀寫(xiě)文件創(chuàng)建文件夾多種方法示例詳解
這篇文章主要介紹了Java讀寫(xiě)文件創(chuàng)建文件夾等多種操作的方法,大家參考使用吧2013-11-11
Java消息隊(duì)列JMS實(shí)現(xiàn)原理解析
這篇文章主要介紹了Java消息隊(duì)列JMS實(shí)現(xiàn)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
日志模塊自定義@SkipLogAspect注解跳過(guò)切面的操作方法
文章介紹了一個(gè)自定義注解@SkipLogAspect,用于在日志模塊中跳過(guò)特定方法的日志切面,這個(gè)注解可以用于需要避免大對(duì)象轉(zhuǎn)換為JSON時(shí)導(dǎo)致的OOM問(wèn)題,文章還提供了注解的實(shí)現(xiàn)代碼以及一個(gè)測(cè)試示例,展示了如何在控制器中使用該注解來(lái)跳過(guò)日志切面,感興趣的朋友一起看看吧2025-02-02

