繁体   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