java - @ConditionalOnProperty 和 @Scheduled 不起作用

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

最佳答案

来自Spring documentation :

The special value "-" indicates a disabled cron trigger, primarily meant for externally specified values resolved by a ${...} placeholder.

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

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

有关默认值的更多信息可以找到 here .

关于java - @ConditionalOnProperty 和 @Scheduled 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58521677/

相关文章:

java - Spring Batch配置异常

java - 使用 ResponseBody 并返回 Model 类实例的 Controller 方法上的奇怪 Spring MVC 4.2.x 行为

java - 实体响应 DTO 中的统计信息

java - 删除 gradle 中的传递类路径依赖

java - 如何比较 char 数组然后替换值

java - 迁移到 Linux 后的 Collections.synchronizedMap(Map) - 第二个线程看不到新条目

java - 作为参数传递给 ArrayList 时,此处不允许使用数组初始值设定项

java - 如何在线程安全模式下以特定编号在Redis中启动计数器?

java - Hazelcast map 条目监听器不是来自 Spring

spring-boot - Springboot网关Prometheus采集海量数据