Использование @ConfigurationProperties в аннотации @Scheduled путем ссылки на имя компонента


Я использую @ConfigurationProperties для настройки задержки фоновой задачи в Spring boot, и я пытаюсь использовать это значение из аннотации @Scheduled на другом компоненте. Однако, чтобы заставить его работать, я должен использовать полное имя, данное Бобу весной.

Класс свойств конфигурации выглядит следующим образом:

@ConfigurationProperties("some")
class SomeProperties {
    private int millis; //the property is some.millis

    public int getMillis() {
        return millis;
    }

    public void setMillis(int millis) {
         this.millis = millis;
    }
}

И я использую значение следующим образом в запланированном методе:

@Component
class BackgroundTasks {

    @Scheduled(fixedDelayString = "#{@'some-com.example.demo.SomeProperties'.millis}") //this works.
    public void sayHello(){
        System.out.println("hello");
    }
}

Можно ли ссылаться на значение, не используя полное имя Боба? Этот ответ предполагает, что это возможно, но я не смог заставить его работать.

2 2

2 ответа:

Использование @Componentв классе свойств позволяет получить доступ к свойству как "#{@someProperties.persistence.delay}.

Подробнее в весна загрузки документации.

Работает для меня в Spring Boot 1.5.10.Выпуск:

@Scheduled(fixedDelayString = "${some.millis}")