从 yaml 文件中读取整数列表
Read Integer List from yaml file
当前的实现是:-
public static final List<Integer> validCodes = Collections.unmodifiableList(Arrays.asList(110, 210, 310,510,610));
但是,我对这种硬编码的方法不满意。我想让它可配置而不是硬编码。我想从 yaml 文件中读取这些值可以解决我的问题。
但是我如何在 yaml 文件中定义一个整数列表并使用 @value 实现它。我可以找到很多关于读取字符串列表而不是整数的示例。
一种方式:
假设属性文件包含
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
您可以使用以下方法从 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;
}
在 application.yml
文件中,如下定义配置变量。
my_integers: 1231,12323,12321
然后使用@Value
注解制作一个整数列表如下。
@Value("#{'${my_integers}'.split(',')}")
private List<Integer> myIntegers;
Spring 完成剩下的工作。您只需要根据需要使用 myIntegers
即可。
编码愉快....
PS:我用过spring boot 2.0.*
当前的实现是:-
public static final List<Integer> validCodes = Collections.unmodifiableList(Arrays.asList(110, 210, 310,510,610));
但是,我对这种硬编码的方法不满意。我想让它可配置而不是硬编码。我想从 yaml 文件中读取这些值可以解决我的问题。
但是我如何在 yaml 文件中定义一个整数列表并使用 @value 实现它。我可以找到很多关于读取字符串列表而不是整数的示例。
一种方式:
假设属性文件包含
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
您可以使用以下方法从 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;
}
在 application.yml
文件中,如下定义配置变量。
my_integers: 1231,12323,12321
然后使用@Value
注解制作一个整数列表如下。
@Value("#{'${my_integers}'.split(',')}")
private List<Integer> myIntegers;
Spring 完成剩下的工作。您只需要根据需要使用 myIntegers
即可。
编码愉快....
PS:我用过spring boot 2.0.*