是否可以为@Scheduled分配一个代表"从不" (在春天)?

时间:2015-10-05 10:33:09

标签: java spring spring-mvc scheduled-tasks spring-scheduled

我正在以固定费率调查@Scheduled,在某些可配置情况下,应该永远不会运行预定作业。

文档没有提到这一点,但fixedDelay()fixedDelayString()的默认值分别为-1""。这些可以用来可靠地确保预定的方法不会被激活吗?

1 个答案:

答案 0 :(得分:6)

你做不到。当您将fixedDelay属性设置为-1或尝试使用@Scheduled而未指定其任何属性的有效值时,Spring会抱怨未设置任何属性:

  

确实需要'cron''fixedDelay(String)''fixedRate(String)'属性中的一个

您可以通过浏览ScheduledAnnotationBeanPostProcessor#processScheduled

的源代码来验证此行为

它包含如下逻辑:

boolean processScheduled = false;

// ...

if (fixedRate >= 0) {
    Assert.isTrue(!processedSchedule, errorMessage);
    processedSchedule = true;
    this.registrar.addFixedRateTask(new IntervalTask(runnable, fixedRate, initialDelay));
}

// ...

Assert.isTrue(processedSchedule, errorMessage);

请参阅此SO post了解有条件禁用@Scheduled的一些选项。