我正在以固定费率调查@Scheduled,在某些可配置情况下,应该永远不会运行预定作业。
文档没有提到这一点,但fixedDelay()
和fixedDelayString()
的默认值分别为-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
的一些选项。