簡體   English   中英

Spring 應用程序中的可選環境變量

[英]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 SpEL表達式模板

來自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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM