Max*_*val 13 spring environment-variables spring-boot
在我的Spring Boot应用程序中,application.properties我有这个定义:
someProp=${SOME_ENV_VARIABLE}
Run Code Online (Sandbox Code Playgroud)
但这是一个仅在某些环境中设置的可选值,我这样使用它
@Value("${someProp:#{null}}")
private String someProp;
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,当env时我得到了这个错误.var不存在
Could not resolve placeholder 'SOME_ENV_VARIABLE' in string value "${SOME_ENV_VARIABLE}"
我期待Spring只是设置一个空值,如果没有找到任何PropertySource.
如何使它可选?
小智 29
这对我来说工作:
spring.datasource.url=jdbc:mysql://${DB_IP:localhost}:3306/app
spring.datasource.username=${SPRING_DATASOURCE_USERNAME:mylocaluser}
spring.datasource.password=${SPRING_DATASOURCE_PASSWORD:localpass}
Run Code Online (Sandbox Code Playgroud)
Rob*_*ley 18
提供默认值 application.properties
someProp=${SOME_ENV_VARIABLE:#{null}}
Run Code Online (Sandbox Code Playgroud)
如果使用@Value("${someProp}),这将正确评估null.首先,如果在处理SOME_ENV_VARIABLE时未找到,application.properties则其值将变为字符串文字"#{null}".然后,将其@Value计算someProp为SpEL表达式,从而得到null.可以通过查看Environmentbean 中的属性来验证实际值.
此解决方案使用PlaceholderConfigurerSupport类指定的默认值语法
可以通过properties属性为每个configurer实例全局定义默认属性值,也可以使用默认值分隔符逐个属性定义默认值,默认值为":"并可通过setValueSeparator(String)自定义.
从外部配置的 Spring Boot文档
最后,虽然您可以在@Value中编写SpEL表达式,但不会从Application属性文件处理此类表达式.
| 归档时间: |
|
| 查看次数: |
8048 次 |
| 最近记录: |