Использование @ConfigurationProperties для вложения или прямого доступа

Я хотел бы иметь доступ к своим «корневым» свойствам или подмножеству. Итак, я попытался сделать это:

Корневые свойства

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

Свойства SDK

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

    // ... etc.
}

Таким образом, я могу либо полностью связать весь класс RootProperties, либо только класс 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 ... )

Как я могу поддержать этот рабочий процесс?


person Josh M.    schedule 17.10.2019    source источник


Ответы (1)


Вы должны использовать @NestedConfigurationProperty

Я думаю, что старый пост отвечает на ваш вопрос https://stackoverflow.com/a/29588215/8308536

person Marko Strainovic    schedule 17.10.2019
comment
Хорошо, спасибо! Может, и с этим поможете? stackoverflow.com/ вопросы/58435628/ - person Josh M.; 17.10.2019