весенний список ссылок application.yml из другого свойства - PullRequest
0 голосов
/ 25 января 2019

У меня есть файл свойств application-dev.yml с содержимым:

spring.profiles: dev
config.some.value:
- ELEMENT1
- ELEMENT2

и другим application-staging.yml с содержимым:

spring.profiles: staging
config.some.value:
- ELEMENT1
- ELEMENT2
- ELEMENT3

, поэтому я в основном не знаю размер списка.Когда я ссылаюсь на этот список в основном application.yml, например:

some.value: ${config.some.value}

, я получаю Failed to convert property value of type 'java.lang.String' to required type 'java.util.List' for property 'value'.Как правильно на него ссылаться?

Ответы [ 6 ]

0 голосов
/ 05 февраля 2019

Это лучший способ создать файл .yml с несколькими значениями:

spring:
  profiles: dev
  config:
    some:
      values: ELEMENT1,ELEMENT2

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

@Value("${spring.config.some.values}")    
private String[] values;

Надеюсь, это поможет вам.

0 голосов
/ 05 февраля 2019

Решение

Одним из способов будет использование списков через запятую в ваших профилях:

  • приложения dev.yml
spring.profiles: dev
config.some.value: ELEMENT1,ELEMENT2
  • приложения staging.yml
spring.profiles: staging
config.some.value: ELEMENT1,ELEMENT2,ELEMENT3

Тогда вы сможете получить к нему доступ в application.yml

some.value: ${config.some.value}

Это решение не требует предварительного определения размера списка.

Объяснение

Причина, по которой это работает , описана здесь . В частности:

YAML lists are represented as comma-separated values (useful for simple String values) and also as property keys with [index] dereferencers, for example this YAML:
servers:
    - dev.bar.com
    - foo.bar.com
Would be transformed into these properties:
servers=dev.bar.com,foo.bar.com
servers[0]=dev.bar.com
servers[1]=foo.bar.com

В частности, это означает, что если вы укажете разделенный запятыми список строк в application.yml и определите List<String> как значение в @ConfigurationProperties, связыватель свойств конфигурации пружины преобразует этот разделенный запятыми список строк в List<Strings>.

0 голосов
/ 01 февраля 2019

(боюсь,) Вы должны ссылаться на это так:

application.yaml:

some.value:
  -${config.some.value[0]}
  -${config.some.value[1]}
  -${config.some.value[2]}

... и я предвижу проблемы, когда их нет ${config.some.value[2]} (размеры списков несовместимы .. -> подход к решению: попробуйте "пустышка" / "noop").

Refs:

0 голосов
/ 01 февраля 2019

При использовании массивов String первый и единственный элемент МОЖЕТ быть объединен запятыми - конечный результат совпадает со списком. Это означает, что вы можете установить свою переменную следующим образом:

config.some.value: ELEMENT1, ELEMENT2, ELEMENT3

затем в разделе вашего профиля вы можете ссылаться на значение конфигурации как на обычную строку:

someValues: $ {config.some.value}

0 голосов
/ 31 января 2019

Вы можете создать свой собственный класс конфигурации, который устанавливает значение для этого свойства, как вы хотите.

Пожалуйста, посмотрите на этот пример:

@ ConfigurationProperties в Spring Boot

0 голосов
/ 31 января 2019
MyProfile:
SomeValues: 
    - ELEMENT1
    - ELEMENT2
     -ELEMENT3
    - ELEMENT4

---
MyProfile:   
someValues: 
    - ELEMENT1
    - ELEMENT2



@Configuration
@EnableConfigurationProperties
@ConfigurationProperties
public class YAMLConfig {


    private List<String> SomeValues= new ArrayList<>();

    // standard getters and setters

}

Доступ к свойствам

  @Autowired
   private YAMLConfig myConfig;


 private List<String> SomeValues= myConfig.SomeValues();

Это сработало для меня

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...