SpringBoot中如何将同一个前缀与多个属性类绑定在一起

假设有一个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.