Spring Cron 调度程序“禁用模式”

Spring Cron scheduler “disable pattern”

我的应用程序从属性文件加载一些 cron 模式。我正在使用这样的 @Scheduled 注释:

@Scheduled(cron = "${config.cronExpression:0 0 11,23 * * *}")

现在我想禁用一些任务,最简单的解决方案是输入一个永远不会 运行 的 cron 模式。 为了做到这一点,我想到了使用只在过去特定日期执行的 cron 表达式。 但不幸的是,Spring cron 表达式不允许添加过去的年份或日期。

有没有永远不会运行的模式?

如果它是一个 cron 表达式(不是 spring 调度程序),您可以在下面使用它使 cron 运行 在 2099[=12] =]

59 59 23 31 12 ? 2099

但是 spring 调度程序不会将年份作为输入。这就是我发现可以将其推迟一段时间的原因。下面将 运行 2 月 29 日,这将是一个闰年。

0 0 0 29 2 ?

从 Spring 5.1.0 开始,@Scheduled 注释可以接受 "-" 作为 cron 表达式以禁用 cron 触发器。

根据 Javadocs:

The special value "-" indicates a disabled cron trigger, primarily meant for externally specified values resolved by a ${...} placeholder.

如果您遇到 Spring 5.1.0 之前的问题(SpringBoot < 2.1),您唯一的选择可能是使用 @Scheduled 禁用 bean/service方法,例如通过使用 @ConditionalOnProperty("my.scheduleproperty.active") 注释而不设置 属性(或将其设置为 false)