我正在调查以固定速率使用@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的选项。

09-05 18:39