在我的Sping 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,我希望Spring只设置一个空值。
如何使其可选?
3条答案
按热度按时间nhjlsmyf1#
在
application.properties
中提供默认值当像
@Value("${someProp})
一样使用时,它将正确地计算为null
。首先,如果在处理application.properties
时未找到SOME_ENV_VARIABLE
,则其值将变为字符串文字“#{null}"。然后,@Value
将someProp
计算为SpEL表达式,结果是null
。实际值可以通过查看Environment
bean中的属性来验证。此解决方案使用
PlaceholderConfigurerSupport
类指定的缺省值语法可以通过properties属性为每个配置器示例全局定义默认属性值,也可以使用默认值分隔符逐个属性地定义默认属性值,默认值分隔符为“:“,可通过setValueSeparator(String)自定义。
和Spring SpEL表达式模板。
来自externalized configuration上的Sping Boot 文档
最后,虽然可以在@Value中编写SpEL表达式,但不能从Application属性文件中处理此类表达式。
abithluo2#
我的工作是:
qojgxg4l3#
因为这可能会引起其他人的兴趣,所以你可以用env变量隐式地覆盖任何属性文件,假设你有property。
someapp.foo
然后可以定义一个env变量
SOMEAPP_FOO
(大写字母和. -〉_),spring将隐式设置env变量的属性。进一步描述如下:https://hughesadam87.medium.com/how-to-override-spring-properties-with-env-vars-82ee1db2ae78