java - 尝试从 yml 文件中读取 int 数组列表并使用 spring 注释 @Value List 加载
问题描述
我正在尝试将 .yml 文件中的属性注入到带有 @Value 注释的字段中。
@Value("#{'${dataconfig.range-List}'.split(',')}")
private List<int[]> rangeList;
应用程序.yml 文件
range-List: [ [ 160,30,30 ],
[ 311,60,60 ],
[ 361,480,360 ] ]
我试过跟随但没有任何效果
@Value("#{'${dataConfig.range-List}'.split(',')}")
private List<int[]> rangeList;
@Value("#{'${dataConfig.range-List:range-List}'}")
private List<int[]> rangeList;
解决方案
我不认为你可以直接这样做,但你可以采取这样的替代路线:
.yml
1 -按如下方式更新您的文件:
custom:
rangeList[0]: "[160,30,30]"
rangeList[1]: "[311,60,60]"
rangeList[2]: "[361,480,360]"
2 - 添加一个ConfigurationProperties
以读取范围列表设置。(您可以编写更短的代码进行转换。)
@Configuration
@ConfigurationProperties(prefix = "custom")
public class CustomConfigurationProperties {
private List<String> rangeList;
private List<int[]> rangeListWithArray = new ArrayList<>();
public CustomConfigurationProperties(List<String> rangeList) {
this.rangeList = rangeList;
}
public List<String> getRangeList() {
return rangeList;
}
public void setRangeList(List<String> rangeList) {
this.rangeList = rangeList;
this.converter();
}
private void converter() {
for (String range : this.rangeList) {
String[] values = range
.replaceAll("\\[", "")
.replaceAll("\\]", "")
.replaceAll("\\s", "")
.split(",");
int[] result = new int[values.length];
for (int i = 0; i < values.length; i++) {
try {
result[i] = Integer.parseInt(values[i]);
} catch (NumberFormatException nfe) {}
}
this.rangeListWithArray.add(result);
}
}
}
3 - 您现在可以通过注入在任何地方使用它CustomConfigurationProperties
。
如果单击此处,您将更详细地探索@ConfigurationProperties描述。
推荐阅读
- database - 托管环境上的 Cakephp 4 MySQL
- java - 如何获取日期的UTC日期?
- asp.net - ASP.NET 5.0 在另一个程序集上查找控制器
- deployment - jProfiler - 需要通过 UCD 部署 linux 代理
- javascript - Cheerio 数据扩散混乱
- python - 如何使用python获取图像的像素坐标
- python - 检查 list_1 中的元素是否匹配 dict.key 和 list_2 中的元素是否匹配 dict.value
- python - Python:从字符串中提取数值,并为每个值加 1
- octave - 回调函数抛出意外的“不一致的参数”错误
- python - Tensorflow-tfrecords:将加载的 tfrecords 传递给 model.fit() 时出错