Использование параметров с выражением Spring @Scheduled - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь параметризовать выражение cron, которое в настоящее время используется для выражения Spring @Scheduled. Все остальные переменные, поступающие из конфигурации клиента, похоже, правильно загружены для других переменных, но Spring, похоже, не может что-либо уловить в выражении cron.

Я пробовал множество разных способов делать это, но, похоже, ничего не работает. Выдача ошибок, таких как

java.lang.IllegalStateException: Encountered invalid @Scheduled method 'importData': Could not resolve placeholder 'cronExpression' in value "${cronExpression}"

Я пробовал вызывать выражение прямо из файла конфигурации

@Scheduled(cron = "${my.cron.expression}")
    public void importData() {

с помощью @Qualifier и давая ему прямое строковое имя

@Qualifier("cronExpression") String cronExpression
this.cronExpression = cronExpression
...
@Scheduled(cron = "${cronExpression}")
    public void importData() {

, но все они по-прежнему возвращают указанное выше сообщение об ошибке

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

    @Bean
    @Qualifier("cronExpression")
    public String cronExpression(@Value("${my.cron.expression}") String cronExpression) {
        return cronExpression;
    }

Помимо имен, это это код, который я использую, который все еще выдает неразрешенную ошибку заполнителя: Свойства:

my:
  cron:
    expression: 0 0 4-6 * * *

ClientConfig:

    @Qualifier("cronExpression")
    public String cronExpression(@Value("${my.cron.expression}") String cronExpression) {
        return cronExpression;
    }

Планировщик:

private final String cronExpression;
...
@Qualifier("cronExpression") String cronExpression
...
this.cronExpression = cronExpression
...
@Scheduled(cron = "${cronExpression}")

1 Ответ

0 голосов
/ 06 августа 2020

Вот мой класс Spring Java:

@EnableScheduling
@SpringBootApplication
@Slf4j
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Scheduled(cron = "${my.cron.expression}")
    public void test(){
        log.info("hello!");
    }
}

, а вот мой application.yml:

my.cron.expression: 0 */1 * * * ?

При этой конфигурации мой журнал запускается каждую минуту.

(я не добавлял конкретных зависимостей)

Примечание: будьте осторожны с оберткой String вашего свойства: попробуйте удалить его, если Spring выдает ошибку.

...