是否可以为@Scheduled 分配代表"never"(在Spring 中)的句点?

Is it possible to assign @Scheduled with a period representing "never" (in Spring)?

我正在研究以固定速率使用 @Scheduled,在某些 可配置的 情况下,预定作业永远不应 运行.

文档没有提到这一点,但 fixedDelay()fixedDelayString() 的默认值分别是 -1""。这些可以用来可靠地确保计划的方法不会触发吗?

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

Exactly one of the 'cron', 'fixedDelay(String)', or 'fixedRate(String)' attributes is required

您可以通过查看 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 的选项。

如spring文档中所述,您可以指定"-"来禁用任务的触发:

CRON_DISABLED: A special cron expression value that indicates a disabled trigger: "-".

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/scheduling/annotation/Scheduled.html#CRON_DISABLED