从 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.*