ConfigurationProperties не работает в Spring Boot2 - PullRequest
1 голос
/ 26 июня 2019
Spring Boot Version 2.1.4 RELEASE

У меня есть клиентский jar с бином настроек, определенным как

    @ConditionalOnBean(annotation = Some.class)
    @ConfigurationProperties(prefix = "service")
    @Data
    public class WebserviceSettings  {
      //bunch of Properties
      private String serviceUrl;
      @PostConstruct
      public void init() { if(serviceUrl==null) throw ValidationException("bla") }
    }

    Another Config Class
    @ConditionalOnBean(annotation = Some.class)
    @EnableConfigurationProperties(WebserviceSettings.class)
    @Configuration
    public class ClientConfig{ 
       @Bean("webserviceSettings")
       public WebserviceSettings webserviceSettings(){
          return new WebserviceSettings();
       }
    }

Клиентский jar добавлен к сервису весенней загрузки.

Тест JUNIT, написанный для клиентского jar, работаетв порядке и загружает Бин без каких-либо проверочных исключений, выходящих из метода PostConstruct.

Тестовый класс, написанный на клиенте, работает!

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = { ClientTestBootApplication.class })
    @TestPropertySource(properties="spring.config.location=classpath:application-test.yaml")

Однако, когда я загружаю Spring Boot Service- не удается загрузить bean-компонент Settings с ValidationException, выданным из метода PostConstruct.

application.yml
 service: 
   url: "bla"

Это означает, что когда клиент добавляется в проект сервисов, он не загружает свойство из yaml.Как решить эту проблему?

Структура проекта

spring-boot-restEasy Application
 - src/main/resources/application-DEV.yml
 --client jar A 
 --client jar B

Клиентский jar = [Сервисный вызов и некоторая бизнес-логика], application-DEV.yml Содержит параметры обслуживания клиентского Jar, такие как url ​​

Exception 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'service-packagName.Settings': Invocation of init method failed; nested exception is ValidationException: [url cannot be Null]
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:139)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:414)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1754)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:593)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:277)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1247)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1167)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:857)
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:760)
    ... 52 more

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

в вашем application.yml, у вас есть:

service:
   url: greetings

Ваш класс конфигурации должен выглядеть так:

    @ConditionalOnBean(annotation = Some.class)
    @ConfigurationProperties(prefix = "service")
    @Data
    public class WebserviceSettings  {
      //bunch of Properties
      private String url; // do not need to use service because you've already specified it in the prefix
      @PostConstruct
      public void init() { if(serviceUrl==null) throw ValidationException("bla") }
    }
0 голосов
/ 26 июня 2019

Поскольку вы уже упоминали службу в качестве префикса в следующей аннотации к классу WebserviceSettings.java.

@ConfigurationProperties(prefix = "service") * * 1004

тогда нет необходимости добавлять службу в качестве префикса в переменную (private String serviceUrl;).

Чтобы исправить это: Измените private String serviceUrl; на private String url;

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