首页 > 解决方案 > 带有@Scheduled 的@ConditionalOnProperty 不起作用

问题描述

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

我的属性如下:

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}"

标签: javaspringspring-boot

解决方案


来自Spring 文档

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

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

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

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


推荐阅读