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

