Spring @RefreshScope не работает с @Component

#spring-boot #spring-cloud #spring-boot-actuator

#spring-загрузка #spring-облако #пружинный загрузочный привод

Вопрос:

У меня есть класс component и pom.xml зависимости, подобные приведенным ниже. Свойства никогда не устанавливаются и остаются равными null.

 @Component
@RefreshScope
public class SecurityProperties1  {

    @Value("${ad.url}")
    public String adUrl;

    @Value("${ad.manager.dn}")
    public String managerDN;

    @Value("${ad.manager.password}")
    public String managerPassword;

    @Value("${ad.search.base}")
    public String searchBase;

    @Value("${ad.user.filter}") 
    public String userFilter;

}
  

pom.xml

          <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
            <version>1.2.1.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-commons -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-commons</artifactId>
            <version>1.1.4.RELEASE</version>
        </dependency>
  

Также,
Мой источник свойств выглядит следующим образом

 @Component
public class CustomPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {

    @Override
    protected String resolvePlaceholder(String placeholder, Properties props) {
        return DynamicProperty.getProperty(placeholder);
    }

     @Override
     protected String resolvePlaceholder(String placeholder, Properties props, int systemPropertiesMode) {
         return DynamicProperty.getProperty(placeholder);
     }

}
  

Комментарии:

1. Для начала прекратите смешивать версии spring cloud. И ваш пользовательский PropertyPlaceholderConfigurer нарушает правильное использование.

Ответ №1:

У меня была такая же проблема. Мое решение: я добавил proxymode = default аннотацию

 @Component
@RefreshScope(proxyMode = DEFAULT)
public class MyClass {

   @Value("${test.value}")
   private String testValue;

  }
  

Ответ №2:

Для более новой версии, если кто-то сталкивается с этой проблемой :
Убедитесь, что у вас есть зависимость spring-cloud-starter-bootstrap в classpath
и также добавьте spring.application.назовите свойство в вашем файле bootstrap.properties
И прокомментируйте каждый класс, который получает свойство с сервера конфигурации, с помощью @RefreshScope

Комментарии:

1. о боже, это spring.application.name действительно загрузочный файл: facepalm: и никаких упоминаний в документации или дайте мне знать

2. где вы нашли о сеттере в документах? Я не могу найти