Как использовать @ConstructorBinding и @PropertySource вместе с @ConfigurationProperties в Spring Boot 2.2.4? - PullRequest
2 голосов
/ 25 февраля 2020

Я новичок в Spring Boot. В настоящее время я пытаюсь создать класс POJO ( SystemProperties.class ) для чтения значения в файле свойств ( parameter.properties отдельно от application.properties, но все еще в том же каталоге / src / main / resources. Проблема возникает, когда я использую @ConstructorBinding в классе, чтобы он был неизменным.

  • @ ConstructorBinding необходимо использовать с @EnableConfigurationProperties или @ ConfigurationPropertiesScan.
  • @ ConfigurationPropertiesScan будет игнорировать аннотацию @Configuration, которая необходима при использовании @PropertySource для указания внешнего файла
    * .properties.

A ) SystemProperties.class

@Configuration
@PropertySource("classpath:parameter.properties")

@ConstructorBinding
@ConfigurationProperties(prefix = "abc")
public class SystemProperties {

    private final String test;

    public SystemProperties (
            String test) {
        this.test = test;
    }

    public String getTest() {
        return test;
    }

B) параметр.properties

abc.test=text1

Я попытался удалить аннотацию @PropertySource, но значение не может быть извлекается, если это не из application.properties. Любая помощь с благодарностью!

1 Ответ

1 голос
/ 25 февраля 2020

Способ решить эту проблему - разделить класс на два класса с двумя разными проблемами. При таком решении вы сохраняете созданный класс SystemProperties и дополнительно добавляете другой класс просто для загрузки параметров файла свойств, чтобы сделать их доступными для вашего приложения.

Решение будет следующим:

@ConstructorBinding
@ConfigurationProperties(prefix = "abc")
public class SystemProperties {

    private final String test;

    public SystemProperties(
            String test) {
        this.test = test;
    }

    public String getTest() {
        return test;
    }
}

Обратите внимание, что я пропустил аннотации @Configuration и @PropertySource.

@Configuration
@PropertySource("classpath:parameter.properties")
public class PropertySourceLoader {
}

Обратите внимание, я просто добавил эти аннотации для нового класса, созданного исключительно для загрузки файла свойств.

Наконец, вы можете добавить @ConfigurationPropertiesScan в ваш основной класс приложения, чтобы включить механизм сопоставления свойств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...