Spring Boot yaml конфигурация для списка строк
Я пытаюсь загрузить массив строк из приложения.yml-файл. Это конфиг:
ignore:
filenames:
- .DS_Store
- .hg
Это класс:
@Value("${ignore.filenames}")
private List<String> igonoredFileNames = new ArrayList<>();
есть и другие конфигурации в том же классе, что нагрузки просто отлично. В моем файле yaml нет вкладок. Тем не менее я получаю следующее исключение:
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'ignore.filenames' in string value "${ignore.filenames}"
4 ответов:
мой Угадай такое, что
@Valueне справляется со "сложными" типами. Вы можете пойти с классом prop следующим образом:@Configuration @ConfigurationProperties('ignore') class IgnoreSettings { List<String> filenames }обратите внимание: этот код в Groovy -Не Java - чтобы держать пример коротким! См. комментарии для советов, как принять.
Смотрите полный пример https://github.com/christoph-frick/so-springboot-yaml-string-list
используйте значения, разделенные запятыми в приложении.в формате YML
ignoreFilenames: .DS_Store, .hgJava-код для доступа
@Value("${ignoreFilenames}") String[] ignoreFilenamesЯ пытался и преуспел ;)
из документов spring boothttps://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
списки YAML представлены в виде ключей свойств с разыменователями [index], например, этот YAML:
my: servers: - dev.bar.com - foo.bar.comбудет преобразовано в эти свойства:
my.servers[0]=dev.bar.com my.servers[1]=foo.bar.comдля привязки к таким свойствам с помощью утилит Spring DataBinder (что и делает @ConfigurationProperties) вам нужно иметь свойство в целевом компоненте типа java.утиль.Список и вам нужно либо предоставить сеттер, либо инициализировать его изменяемым значением, например, это будет привязано к указанным выше свойствам. Вот как будет выглядеть код вопроса.
@ConfigurationProperties(prefix="ignore") public class Filenames { private List<String> ignoredFilenames = new ArrayList<String>(); public List<String> getFilenames() { return this.ignoredFilenames; } }
как дополнение к ответ Ахмета вы можете добавить разрывы строк в строку, разделенную coma, используя
>символ.The
application.yml:ignoreFilenames: > .DS_Store, .hgJava-кода:
@Value("${ignoreFilenames}") String[] ignoreFilenames;это полезно, когда элементы длинны и не вписываются в экран.
Comments