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

标签 java spring spring-boot configuration lombok

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

根属性

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

Sdk属性

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

    // ... etc.
}

通过这种方式,我可以 Autowiring 完整的 RootProperties 类,或者仅 Autowiring SdkProperties 类,具体取决于我需要为给定上下文访问的内容。

但是,当我以这种方式配置它时,我从 Spring 中得到了堆栈溢出:

Cause: java.lang.StackOverflowError
    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$3(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$3(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

我认为旧帖子回答了你的问题 https://stackoverflow.com/a/29588215/8308536

关于java - 使用@ConfigurationProperties进行嵌套或直接访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58434092/

相关文章:

java - 判断Spring/Spring Security等知识的问题

java - 如何在 Spring boot 中禁用 Jolokia 的写入操作?

java - hibernate多级级联删除

java - 即使整数更改后,如何使某些内容使用整数的先前值

java - AWS Kinesis 客户端失败并显示 java.lang.NoClassDefFoundError

Java 并行流 - 调用 parallel() 方法的顺序

spring - 如何使用@Autowired像工厂模式一样动态注入(inject)实现

java - 无法在 Docker 环境中使用 Spring ResourceUtils 或 DefaultResourceLoader 获取类路径资源

spring-boot - Spring 启动+Redis

spring-boot - 带有 Spring Boot 和 gradle 的 flyway--org.flywaydb.core.Flyway : method <init>()V not found