Spring Boot 2.0.5 не может связать список свойств с сервера spring-cloud-config - PullRequest
0 голосов
/ 22 октября 2018

Я столкнулся со следующей ситуацией: я перенес свое приложение из Spring Boot 1.5.x в Spring Boot 2.0.5.

У меня есть следующий класс:

@ConfigurationProperties(prefix = "some.property")
public class Myclass {

@Getter
@Setter
private List<String> list;

}

Также у меня есть конфиг yml, подобный следующему:

some:
  property:
    list:
      - value 1
      - value 2
      - value 3 

Этот конфиг получен с удаленного сервера config-cloud-cloud.

Если я пытаюсь запустить приложение, у меня следующее исключение:

org.springframework.boot.
context.properties.bind.BindException: Failed to bind properties under 
'some.property' to Myclass


Description:

Property: some.property.list[0]
Value: value 1
Origin: "some.property.list[0]" from property source "bootstrapProperties"
Reason: The elements 
[some.property.list[0],some.property.list[1],some.property.list[2]] were 
left unbound.
   Property: some.property.list[1]
Value: value 2
Origin: "some.property.list[1]" from property source "bootstrapProperties"
Reason: The elements 
[some.property.list[0],some.property.list[1],some.property.list[2]] were 
left unbound.

Property: some.property.list[2]
Value: value 3
Origin: "some.property.list[2]" from property source "bootstrapProperties"
Reason: The elements 
[some.property.list[0],some.property.list[1],some.property.list[2]] were 
left unbound.

Но если я использую локальный файл bootstrap.yml, а не удаленный сервер конфигурации - все в порядке.

Кто-нибудь сталкивался с такой же проблемой?Мне очень нужна ваша помощь.

PS Конфигурационный сервер Spring тоже имеет версию 2.0.5.

1 Ответ

0 голосов
/ 23 октября 2018

Наконец-то я нашел основную причину проблемы.

Ну, потому что я не очень опытный парень с Cloud Config Server, причину было трудно найти.Это все о переопределении списка свойств для разных профилей:

Представим, что у вас есть два файла свойств на вашем конфигурационном сервере:

application.yml

application-dev.yml -он имеет более высокий приоритет, поэтому он отменяет все, что было до него.

В application.yml у меня было такое свойство

some:
  property:
    list:

Итак, это просто пустой список.

Но в application-dev.yml я имеюимел свойство, подобное этому:

some:
  property:
    list:
      - value 1
      - value 2
      - value 3

Итак, в этой ситуации вы получите ошибку, как я упоминал выше.Все, что вам нужно сделать - это исправить пустой список следующим образом.

some:
  property:
    list:
      - ""
...