Привязка конструктора @ConfigurationProperties не работает в 2.2.0.RC1 - PullRequest
1 голос
/ 06 октября 2019

Я пробовал новую версию Spring Boot 2.2.0.RC1, в частности новую функцию привязки конструктора свойств конфигурации, описанную в разделе 2.8.2. Конструктор привязки. Я создал очень маленький проект с таким классом:

@Configuration
@ConfigurationProperties("acme")
public class AppConfig {
    private final String stuff;

    public AppConfig(String stuff) {
        this.stuff = stuff;
    }

    public String getStuff() {
        return stuff;
    }
}

и application.yml вроде этого:

server:
  port: 9000

acme:
  stuff: hello there

Мой основной метод в этом классе:

@SpringBootApplication
public class AcmeApplication {

    public static void main(String[] args) {
        new SpringApplicationBuilder(AcmeApplication.class)
                .logStartupInfo(true)
                .bannerMode(Banner.Mode.CONSOLE)
                .web(WebApplicationType.SERVLET)
                .run();
    }
}

Результатом запуска приложения является следующий вывод:

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of constructor in com.acme.config.AppConfig required a bean of type 'java.lang.String
' that could not be found.


Action:

Consider defining a bean of type 'java.lang.String' in your configuration.

Интересно, если я изменю код в классе AppConfig, чтобы использовать привязку свойств, удалив конструктор, удалив "финал""Модификатор из поля" вещи "и добавление метода setStuff (String), приложение запускается нормально (метод setStuff вызывается, как и ожидалось).

Чего мне не хватает при попытке заставить работать привязку конструктора? Я попытался удалить аннотацию @Configuration, добавить аннотацию @EnableConfigurationProperties, добавить @ConfigurationPropertiesScan и т. Д., Но из прочтения документации ни одна из этих вещей, похоже, здесь не применима в любом случае. Мне кажется, что он пытается внедрить бины Spring, а не создавать и внедрять объекты свойств конфигурации. Вот почему я подумал, что, возможно, удаление аннотации @Configuration поможет, но это не имеет значения. Кстати, я хотел бы, чтобы этот AppConfig был Spring Bean, чтобы я мог внедрить его в классы Service, например.

Ответы [ 2 ]

0 голосов
/ 09 октября 2019

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

См. Также: https://github.com/spring-projects/spring-boot/issues/18543

0 голосов
/ 06 октября 2019

Выполнено краткое исследование. Здесь, кажется, причина https://github.com/spring-projects/spring-boot/issues/16928#issuecomment-494717209 Пожалуйста, просмотрите всю ветку, чтобы получить больше контекста. А вот и описание проблемы, о которой говорилось ранее https://github.com/spring-projects/spring-boot/issues/8762#issuecomment-494310988

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