Spring Boot 2.0.5 无法绑定来自 spring-cloud-config 服务器的属性列表
Spring Boot 2.0.5 can not bind list of properties from spring-cloud-config server
我已经 运行 进入下一个情况:我已经从 Spring Boot 1 迁移了我的应用程序。5.x
到 Spring 启动 2.0.5.
我有下一个class:
@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 版。
我终于找到了问题的根本原因。
好吧,因为我对云配置服务器不是很有经验,所以很难找到原因。这完全是关于覆盖不同配置文件的 属性 列表:
假设您的配置服务器上有两个 属性 文件:
application.yml
application-dev.yml - 它具有更高的优先级,因此它会覆盖之前的所有内容。
在 application.yml 我有过 属性 这样的
some:
property:
list:
所以,这只是一个空列表。
但是在应用程序中-dev.yml我有过这样的属性:
some:
property:
list:
- value 1
- value 2
- value 3
因此,在这种情况下,您会遇到我上面提到的错误。
您需要做的就是像这样修复空列表。
some:
property:
list:
- ""
我已经 运行 进入下一个情况:我已经从 Spring Boot 1 迁移了我的应用程序。5.x 到 Spring 启动 2.0.5.
我有下一个class:
@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 版。
我终于找到了问题的根本原因。
好吧,因为我对云配置服务器不是很有经验,所以很难找到原因。这完全是关于覆盖不同配置文件的 属性 列表:
假设您的配置服务器上有两个 属性 文件:
application.yml
application-dev.yml - 它具有更高的优先级,因此它会覆盖之前的所有内容。
在 application.yml 我有过 属性 这样的
some:
property:
list:
所以,这只是一个空列表。
但是在应用程序中-dev.yml我有过这样的属性:
some:
property:
list:
- value 1
- value 2
- value 3
因此,在这种情况下,您会遇到我上面提到的错误。 您需要做的就是像这样修复空列表。
some:
property:
list:
- ""