假设有一个yaml配置。
foo:
a:
b:
c:
d:
一般来说,你将创建一个这样的对象。
@Data
@Validated
@Component
@ConfigurationProperties(prefix = "foo")
public class FooProperties {
@NotBlank
private String a;
// b c and d
}
但出于对项目结构的考虑,我需要将它们划分为不同包中的多个对象,而且它们将使用相同的前缀。
第一个对象:
@Data
@Validated
@Component
@ConfigurationProperties(prefix = "foo")
public class AProperties {
// only a property
@NotBlank
private String a;
}
其他对象:
@Data
@Validated
@Component
@ConfigurationProperties(prefix = "foo")
public class BProperties {
// only b property
@NotBlank
private String b;
}
…
现在,当我的项目从配置服务器获取配置时,Spring会说。
***************************
APPLICATION FAILED TO START
***************************
Binding to target [Bindable@2b32cd10 type = AProperties, value = 'provided', annotations = array<Annotation>[@org.springframework.boot.context.properties.ConfigurationProperties(ignoreInvalidFields=false, ignoreUnknownFields=false, prefix=foo, value=foo), @org.springframework.validation.annotation.Validated(value={})]] failed:
Property: foo.b
Value: someValue
Origin: "foo.b" from property source "bootstrapProperties-xxx"
Reason: The elements [foo.b] were left unbound.