我希望能够访问我的“根”属性或子集。所以我尝试这样做:
根属性
@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/