Spring 应用程序中的可选环境变量

新手上路,请多包涵

在我的 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 设置一个空白值。

如何使其成为可选?

原文由 Maxime Laval 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 772
1 个回答

application.properties 中提供一个默认值

someProp=${SOME_ENV_VARIABLE:#{null}}

当像 @Value("${someProp}) 使用时,这将正确评估为 null 。首先,如果在处理 SOME_ENV_VARIABLE 时没有找到 application.properties ,则其值变为字符串文字“#{null}”。然后, @Value 评估 someProp 作为 SpEL 表达式,结果是 null 。实际值可以通过查看 Environment bean 中的属性来验证。

此解决方案使用 PlaceholderConfigurerSupport 类指定的默认值语法

可以通过 properties 属性为每个配置器实例全局定义默认属性值,或者使用默认值分隔符逐个属性地定义默认值分隔符,默认值分隔符是“:”,并且可以通过 setValueSeparator(String) 进行自定义。

Spring SpEL 表达式模板

来自关于 外部化配置 的 Spring Boot 文档

最后,虽然您可以在 @Value 中编写 SpEL 表达式,但此类表达式不会从应用程序属性文件中处理。

原文由 Robert Farley 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题