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}"
593   4  

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, .hg

Java-код для доступа

@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, 
  .hg

Java-кода:

@Value("${ignoreFilenames}")    
String[] ignoreFilenames;

это полезно, когда элементы длинны и не вписываются в экран.

Comments

    Ничего не найдено.