是否可以为@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:
"-"
.
我正在研究以固定速率使用 @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:
"-"
.