我正在调查以固定速率使用@Scheduled的情况,在某些可配置的情况下,永远不应运行计划的作业。
文档中没有提及,但是fixedDelay()
和fixedDelayString()
的默认值分别是-1
和""
。可以使用这些方法可靠地确保计划的方法不会触发吗?
最佳答案
你不能。当您将fixedDelay
属性设置为-1
或尝试使用@Scheduled
而不为其任何属性指定有效值时,Spring会提示未设置任何属性:
您可以通过浏览 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
的选项。