Java 从yaml文件读取整数列表

Java 从yaml文件读取整数列表,java,arrays,spring-boot,yaml,snakeyaml,Java,Arrays,Spring Boot,Yaml,Snakeyaml,目前的实施是:- public static final List<Integer> validCodes = Collections.unmodifiableList(Arrays.asList(110, 210, 310,510,610)); publicstaticfinallist-validCodes=Collections.unmodifiableList(Arrays.asList(110210310510610)); 然而,我不喜欢这种方法,因为这是硬编码的。我想

目前的实施是:-

public static final List<Integer> validCodes = Collections.unmodifiableList(Arrays.asList(110, 210, 310,510,610));
publicstaticfinallist-validCodes=Collections.unmodifiableList(Arrays.asList(110210310510610));
然而,我不喜欢这种方法,因为这是硬编码的。我想让它可配置,而不是硬编码。我想从yaml文件中读取这些值可以解决我的问题


但是如何在yaml文件中定义整数列表并使用@value实现它呢。我可以找到很多关于读取字符串列表而不是整数的示例。

单向:

假设属性文件包含

intArr={1,2,3}

然后可以像这样使用
@Value

@Value("#{${intArr}}")
Integer[] intArr;
第二种方式:

如果属性包含逗号分隔的值,如下所示:
intArr:[1,2,3]

那么注释代码将是:

@Value("${intArr}")
private int[] intArr;
编辑:

您可以配置
ConversionServiceFactoryBean
,它激活新的配置服务,支持将字符串转换为集合类型

通过激活此选项,它将支持以下类型的转换:

 intArray= 1, 2, 3, 4
以及以下代码:

@Value("${intArray}")
private List<Integer> myList;
@Value(“${intArray}”)
私人名单;

Ref

您可以使用以下方法从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;
    }
private Map loadYMLData(){
映射结果=新的HashMap();
试一试{
字符串fileName=“{{YAMAL FILE NAME}}}.yml”;
Yaml Yaml=新的Yaml();
ClassLoader ClassLoader=getClass().getClassLoader();
File File=新文件(classLoader.getResource(fileName.getFile());
InputStream ios=新文件InputStream(文件);
//解析YAML文件并将输出作为一系列映射和列表返回
结果=(映射)yaml.load(ios);
System.out.println(result.toString());
}捕获(例外e){
logger.error(“error==>”,e);
}
返回结果;
}

应用程序.yml
文件中,定义配置变量如下

@Value("#{'${my_integers}'.split(',')}")
private List<Integer> myIntegers;
my_整数:12311232312321

然后使用
@Value
注释生成一个整数列表,如下所示

@Value("#{'${my_integers}'.split(',')}")
private List<Integer> myIntegers;
@Value(“{${my_integers}.split(',')}”)
私有列表整数;
剩下的就由春天来做。您只需根据需要使用
myIntegers
。 快乐编码


PS:我使用了
SpringBoot2.0.*

这也可以做
int[]arr=(int[])Yaml.load(新文件(“File.yml”)我也不想从文件中读取它。我想将其作为yaml文件@VEBBIEABLE中的可配置属性。我尝试了第二种方法:-intArr:[1,2,3]@Value(${intArr}”)私有列表intArr;不工作!!您是否在yaml属性中声明了要在
intArr
之前追加的前缀?不,没有前缀。它给出了一个空值@vebbieok。用另一种方法编辑答案。对不起,我使用的是静态变量。这就是空值的原因。然而,这种方法甚至不适用于非静态变量。它表示无法解析占位符。然而,如果我给它一个intar:'1,2,3',它就工作了。我猜“[]”括号会产生问题。但是,如果我使用intArr:'1,2,3',它将成为字符串列表,但我需要整数列表