带有@Scheduled的@ConditionalOnProperty无法正常工作

时间:2019-10-23 11:19:20

标签: java spring spring-boot

如果存在属性,我想触发特定的预定功能。

我的属性如下:

tasks:
    task1:
        interval: "* * * ? * *"
    task2:
        interval: "0 * * ? * *"

这些是我的功能

@Scheduled(cron = "${tasks.task1.interval}")
public void doTask1()
{
    // do something
}

@Scheduled(cron = "${tasks.task2.interval}")
public void doTask2()
{
    // do something
}

我想实现的是,如果未指定task2属性,则doTask2()不会触发。

属性:

tasks:
    task1:
        interval: "* * * ? * *"

功能:

@ConditionalOnProperty(value = "tasks.task1")
@Scheduled(cron = "${tasks.task1.interval}")
public void doTask1()
{
    // do something
}



@ConditionalOnProperty(value = "tasks.task2")
@Scheduled(cron = "${tasks.task2.interval}")
public void doTask2()
{
    // do something
}

如果我尝试此设置,则始终会收到以下错误:

Could not resolve placeholder 'tasks.task2.interval' in value "${tasks.task2.interval}"

1 个答案:

答案 0 :(得分:1)

来自Spring documentation

  

特殊值“-”表示已禁用的cron触发器,主要用于由$ {...}占位符解析的外部指定值。

您可以为cron表达式使用默认的负值:

@Scheduled(cron = "${tasks.task2.interval:-}")

有关默认值的更多信息,请参见here