当前实现为:-
public static final List<Integer> validCodes = Collections.unmodifiableList(Arrays.asList(110, 210, 310,510,610));
但是,我对此硬编码的方法不满意。我想使其可配置,而不是硬编码。我想从yaml文件中读取此值可以解决我的问题。
但是我如何在yaml文件中定义一个Integer列表,并使用@value对其进行实整。我可以找到很多有关读取字符串列表而不是整数的示例。
答案 0 :(得分:1)
在application.yml
文件中,如下定义config变量。
my_integers: 1231,12323,12321
然后使用@Value
批注按如下所示制作一个Integer列表。
@Value("#{'${my_integers}'.split(',')}")
private List<Integer> myIntegers;
其余部分由Spring完成。您只需要使用myIntegers
。
编码愉快....
PS:我用过spring boot 2.0.*
答案 1 :(得分:0)
一种方式:
假设属性文件包含
intArr={1,2,3}
然后@Value
可以像这样使用:
@Value("#{${intArr}}")
Integer[] intArr;
第二种方式:
如果属性包含逗号分隔的值,例如:
intArr: [1, 2, 3]
然后注释代码为:
@Value("${intArr}")
private int[] intArr;
编辑:
您可以配置ConversionServiceFactoryBean
来激活新的配置服务,该服务支持将String转换为Collection类型。
通过激活此选项,它将支持以下类型的转换:
intArray= 1, 2, 3, 4
以及以下代码:
@Value("${intArray}")
private List<Integer> myList;
参考here
答案 2 :(得分:0)
您可以使用以下方法从YML文件获取所有可用属性。使用以下方法时,必须将以下jar添加到构建脚本中。
compile group: 'org.yaml', name: 'snakeyaml', version: '1.12'
我认为这将帮助您继续执行任务。
private Map<String, Object> loadYMLData() {
Map<String, Object> result = new HashMap<String, Object>();
try {
String fileName = "{{YAMAL FILE NAME}}.yml";
Yaml yaml = new Yaml();
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource(fileName).getFile());
InputStream ios = new FileInputStream(file);
// Parse the YAML file and return the output as a series of Maps and Lists
result = (Map<String, Object>) yaml.load(ios);
System.out.println(result.toString());
} catch (Exception e) {
logger.error("Error==>", e);
}
return result;
}