[英]Optional environment variables in Spring app
在我的 Spring Boot 應用程序的application.properties
我有這個定義:
someProp=${SOME_ENV_VARIABLE}
但這是一個僅在某些環境中設置的可選值,我是這樣使用的
@Value("${someProp:#{null}}")
private String someProp;
令人驚訝的是,當 env. var 不存在Could not resolve placeholder 'SOME_ENV_VARIABLE' in string value "${SOME_ENV_VARIABLE}"
如果在任何PropertySource
找不到,我希望 Spring 只設置一個空白值。
如何使它成為可選的?
在application.properties
提供默認值
someProp=${SOME_ENV_VARIABLE:#{null}}
當像@Value("${someProp})
這樣使用時,它將正確評估為null
。首先,如果在處理application.properties
時未找到SOME_ENV_VARIABLE
,則其值將成為字符串文字“#{null}”。 @Value
someProp
評估為SpEL表達式,結果為null
。可以通過查看Environment
Bean中的屬性來驗證實際值。
此解決方案利用PlaceholderConfigurerSupport
類指定的默認值語法
可以通過properties屬性為每個配置程序實例全局定義默認屬性值,也可以使用默認值分隔符(默認情況下為“:”並通過setValueSeparator(String)進行自定義)在逐個屬性的基礎上進行定義。
來自Spring Boot docs關於外部化配置的信息
最后,盡管您可以在@Value中編寫SpEL表達式,但不會從Application屬性文件中處理此類表達式。
因為這對來到這里的其他人來說可能很有趣,所以您可以隱式覆蓋任何帶有 env 變量的屬性文件。 假設你有財產。
someapp.foo
然后你可以定義一個環境變量SOMEAPP_FOO
(大寫字母和 . -> _ ),spring 將從環境中隱式設置屬性。 多變的。
此處描述
https://www.tutorialworks.com/spring-boot-kubernetes-override-properties/
這對我有用:
spring.datasource.url=jdbc:mysql://${DB_IP:localhost}:3306/app
spring.datasource.username=${SPRING_DATASOURCE_USERNAME:mylocaluser}
spring.datasource.password=${SPRING_DATASOURCE_PASSWORD:localpass}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.