使用@ConfigurationProperties 进行嵌套或直接访问

Using @ConfigurationProperties for nesting or direct access

我希望能够访问我的 "root" 属性或子集。所以我尝试这样做:

根属性

@Configuration
@ConfigurationProperties
@Data
@Validated
public class RootProperties
{
    @NotNull
    private SdkProperties sdk;
}

SdkProperties

@Configuration
@ConfigurationProperties
@Data
@Validated
public class SdkProperties
{
    @NotEmpty
    private String apiKey

    // ... etc.
}

所以通过这种方式,我可以自动装配完整的 RootProperties,或仅自动装配 SdkProperties class,具体取决于我需要为给定的上下文访问什么。

然而,当我以这种方式配置它时,我从 Spring:

得到堆栈溢出
Cause: java.lang.WhosebugError
    at jdk.internal.reflect.GeneratedMethodAccessor2123.invoke(Unknown Source)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at org.springframework.boot.configurationprocessor.fieldvalues.javac.Tree.accept(Tree.java:44)
    at org.springframework.boot.configurationprocessor.fieldvalues.javac.JavaCompilerFieldValuesParser.getFieldValues(JavaCompilerFieldValuesParser.java:51)
    at org.springframework.boot.configurationprocessor.TypeElementMembers.process(TypeElementMembers.java:81)
    at org.springframework.boot.configurationprocessor.TypeElementMembers.<init>(TypeElementMembers.java:68)
    at org.springframework.boot.configurationprocessor.ConfigurationMetadataAnnotationProcessor.processTypeElement(ConfigurationMetadataAnnotationProcessor.java:273)
    at org.springframework.boot.configurationprocessor.ConfigurationMetadataAnnotationProcessor.processNestedType(ConfigurationMetadataAnnotationProcessor.java:423)
    at org.springframework.boot.configurationprocessor.ConfigurationMetadataAnnotationProcessor.lambda$processNestedLombokTypes(ConfigurationMetadataAnnotationProcessor.java:364)
    at org.springframework.boot.configurationprocessor.ConfigurationMetadataAnnotationProcessor.processNestedLombokTypes(ConfigurationMetadataAnnotationProcessor.java:361)
    at org.springframework.boot.configurationprocessor.ConfigurationMetadataAnnotationProcessor.processTypeElement(ConfigurationMetadataAnnotationProcessor.java:279)
    at org.springframework.boot.configurationprocessor.ConfigurationMetadataAnnotationProcessor.processNestedType(ConfigurationMetadataAnnotationProcessor.java:423)

    ...

    at org.springframework.boot.configurationprocessor.ConfigurationMetadataAnnotationProcessor.processNestedType(ConfigurationMetadataAnnotationProcessor.java:423)
    at org.springframework.boot.configurationprocessor.ConfigurationMetadataAnnotationProcessor.lambda$processNestedLombokTypes(ConfigurationMetadataAnnotationProcessor.java:364)
    at org.springframework.boot.configurationprocessor.ConfigurationMetadataAnnotationProcessor.processNestedLombokTypes(ConfigurationMetadataAnnotationProcessor.java:361)
    at org.springframework.boot.configurationprocessor.ConfigurationMetadataAnnotationProcessor.processTypeElement(ConfigurationMetadataAnnotationProcessor.java:279)

    ( ... hundreds more of these blocks ... )

如何支持此工作流程?

你应该使用 @NestedConfigurationProperty

我觉得老post回答了你的问题