Весенняя загрузка: загрузка @Value из файла YAML

Мне нужно загрузить свойство из .yml файла, который содержит путь к папке, в которой приложение может читать файлы.

Я использую следующий код для ввода свойства:

@Value("${files.upload.baseDir}")
private String pathToFileFolder;

Файл .yml для разработки находится в разделе src/main/resources/config/application.yml, im запускающее приложение со следующей командой в процессе производства, чтобы переопределить параметры разработки:

java -jar app.jar --spring.config.location=/path/to/application-production.yml

Документация Spring Boot говорит:

SpringApplication загрузит свойства из файлов application.properties в следующих местах и добавит их в среду Spring:

  1. Подкаталог A/config текущего каталога.

  2. Текущий каталог

  3. Пакет classpath/config

  4. Корень класса

Так же как:

Вы также можете использовать файлы YAML (.yml) в качестве альтернативы ".properties".

Файл .yml содержит:

{...}
files:
      upload:
        baseDir: /Users/Thomas/Code/IdeaProjects/project1/files
{...}

И мой класс Application аннотируется с помощью:

@SpringBootApplication
@EnableCaching

Когда я запускаю приложение, я получаю исключение:

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'files.upload.baseDir' in string value "${files.upload.baseDir}"

Должен ли я использовать класс YamlPropertySourceLoader или добавить специальную аннотацию, чтобы включить поддержку .yml в Spring Boot?

Изменить. Файл .yml содержит некоторые другие свойства, которые успешно загружаются Spring Boot, например dataSource.XXX или hibernate.XXX.

Ответ 1

M. Deinum прав, настройка, которую я предоставил, работает - файл yml был отклонён неправильно, поэтому свойство не удалось найти.

Ответ 2

Для меня дубликат ключа в файле свойств вызвал это...

Я использовал тот же ключ, не зная, в большом файле yml.

key:   
 key1: value
 key2: value

key:  
 key3: value