java - 将 key->values (variableName->system environment value) 的映射从 application.properties 注入到具有默认值的映射对象
问题描述
在application.properties
我有这样的地图:
variable.map={variableName1: '${VARIABLE_VALUE_1}', variableName2: '${VARIABLE_VALUE_2}'}
VARIABLE_VALUE_1
并且VARIABLE_VALUE_2
来自系统环境变量。
我可以使用 SpEL 在我的配置类中非常简单地阅读它:
@Value("#{${variable.map}}")
private Map<String,String> variableMap;
因此,我得到了两个 map 条目variableMap
。但是,如果其中一个不存在,我会在应用程序启动时遇到异常:
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'VARIABLE_VALUE_1' in value "{variableName1: '${VARIABLE_VALUE_1}', variableName2: '${VARIABLE_VALUE_2}'}"
我该如何处理这个异常?例如,通过放置variableName1
任何默认值或仅放置条目variableName2 -> VARIABLE_VALUE_2
(所以如果系统环境变量不存在 -> 忽略它)?
解决方案
如果您在值中使用参数,则取决于它们。因此,如果您声明两个参数,则两者都需要。
您可以尝试在一个参数中声明整个地图,这样您就更加灵活(但我不确定这是否有效)。即使你没有那个参数,你也可以声明使用 null 来代替。
variable.map=${VARIABLE_VALUE:#{null}}
并将您的价值声明为:
VARIABLE_VALUE = "{'variableName1': 'value1', 'variableName2': 'value2'}"
推荐阅读
- vuejs2 - 如何通过脚本包含使用 CKEditor5 (Vue2) 插件?
- windows - 如何在混合域计算机上获取 SAM 兼容的域名?
- python - pytest 无法识别从命令行发送的参数
- go - 使用递归填充地图时的意外行为
- tensorflow - 如何在 tf.where tensorflow 中给出否定条件
- c# - 断言乐趣
被调用 - php - 通过二维数组对一个三维php数组进行排序
- c# - SQLLite sqlite-net-pcl xamarin 中 Database.QueryAsync 与 ToListAsync 之间的差异
- docker - docker-compose:将容器连接到“network=host”和其他服务
- excel - 数组中的组合框值未显示在 2 列中