从yaml文件中读取整数列表

时间:2019-03-08 10:42:31

标签: java arrays spring-boot yaml snakeyaml

当前实现为:-

public static final List<Integer> validCodes = Collections.unmodifiableList(Arrays.asList(110, 210, 310,510,610));

但是,我对此硬编码的方法不满意。我想使其可配置,而不是硬编码。我想从yaml文件中读取此值可以解决我的问题。

但是我如何在yaml文件中定义一个Integer列表,并使用@value对其进行实整。我可以找到很多有关读取字符串列表而不是整数的示例。

3 个答案:

答案 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;
    }