使用
Spring Boot 1.3.0.RELEASE
我有几个yaml文件描述了程序的几个实例.我现在想要将所有这些文件解析为List< Program> (Map,无论如何),所以我稍后可以在所有程序中搜索给定条件的最合适的实例.
我非常喜欢使用@ConfigurationProperties的方法,它对于单个yaml文件工作得很好,但我还没有找到使用该方法读取目录中所有文件的方法.
当前的方法适用于单个文件:
programs/program1.yml
name: Program 1
minDays: 4
maxDays: 6
可以阅读
@Configuration
@ConfigurationProperties(locations = "classpath:programs/program1.yml", ignoreUnknownFields = false)
public class ProgramProperties {
private Program test; //Program is a POJO with all the fields in the yml.
//getters+setters
我尝试将位置更改为列出所有文件位置的数组= {“classpath:programs / program1.yml”,“classpath:programs / program2.yml”}以及使用locations =“classpath:programs / *.yml “,但仍然只加载第一个文件(数组方法)或根本不加载(通配符方法).
所以,我的问题是,Spring Boot中最好的方法是在classpath目录中加载一堆yaml文件并将它们解析为(List of)POJO,这样它们可以在Controller中自动装配?我是否需要直接使用Snakeyaml,还是有一种我还没有找到的集成机制?
编辑:
一种工作方法是手动完成:
private static final Yaml yaml = new Yaml(new Constructor(Program.class));
private static final ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
for (Resource resource : resolver.getResources("/programs/*.yml")) {
Object data = yaml.load(resource.getInputStream());
programList.add((Program) data);
}
}
catch (IOException ioe) {
logger.error("failed to load resource", ioe);
}