Spring?Boot各類變量的使用小結(jié)
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 不能設(shè)置成操作系統(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
的方式設(shè)置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
)中獲取變量值。假設(shè) 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: 12306789fdfdf4
2.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
到此這篇關(guān)于Spring Boot各類變量的使用的文章就介紹到這了,更多相關(guān)Spring Boot變量使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java Web使用簡單的批處理操作(記事本+Tomcat)
這篇文章主要介紹了Java Web使用簡單的批處理操作 ,需要的朋友可以參考下2014-10-10json如何解析混合數(shù)組對象到實體類的list集合里去
這篇文章主要介紹了json解析混合數(shù)組對象到實體類的list集合里去的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06spring?retry實現(xiàn)方法請求重試的使用步驟
這篇文章主要介紹了spring?retry實現(xiàn)方法請求重試及使用步驟,本文分步驟通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07