Использование Spring Boot 1.3.0.RELEASE
У меня есть пара файлов yaml, описывающих несколько экземпляров программы. Теперь я хочу разобрать все эти файлы в List<Program>
(карту, что угодно), чтобы позже я мог искать наиболее подходящий экземпляр для заданных критериев во всех программах.
Мне очень нравится подход с @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
Я попытался изменить местоположения на массив, в котором перечислены все мои файлы locations = {"classpath:programs/program1.yml", "classpath:programs/program2.yml"}
, а также использовать locations = "classpath:programs/*.yml"
, но это по-прежнему загружает только первый файл (массив-подход) или вообще ничего (подстановочный знак).
Итак, мой вопрос: как лучше всего в Spring Boot загрузить кучу файлов yaml в каталог пути к классам и проанализировать их в (список) POJO, чтобы их можно было автоматически связать в контроллере? Нужно ли мне использовать 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);
}
classpath:
. - person M. Deinum   schedule 03.12.2015