Spring Boot 2.0.5无法绑定spring-cloud-config服务器中的属性列表

时间:2018-10-22 15:31:27

标签: spring-boot spring-cloud-config spring-config

我遇到了下一种情况:我已经从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 

此配置是从远程spring-cloud-config服务器获取的。

如果我尝试运行应用程序,则会遇到下一个异常:

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文件而不是远程配置服务器-一切都很好。

有人遇到过同样的问题吗?我真的需要你的帮助。

P.S。 Spring配置服务器也具有2.0.5版本。

1 个答案:

答案 0 :(得分:1)

最后,我找到了问题的根本原因。

好吧,因为我不是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:
      - ""