【问题标题】:multiple cron expressions from db来自 db 的多个 cron 表达式
【发布时间】:2019-08-14 14:10:59
【问题描述】:

我有一个 Spring Boot 应用程序,并且有几个每小时运行的进程。我正在使用带有 cron 表达式的 @Scheduled。
现在我收到了一个更改请求,其中包括允许 UI 更改以更改运行时进程的频率,这在如下所示的数据库表中指定。

Table:
Id,  name,   cronexp,      some_foreing_key
1,  "John",  "0 0 1 * * *",  4
2,  "Steve", "0 0 2 * * *",  8

现在,我想象的可能是有一个用 @Scheduled 注释的方法,它每隔几分钟执行一次,然后以某种方式检查这些表达式所经过的时间。有什么想法吗?

【问题讨论】:

  • 我得到了你想要达到的 100%,但我必须告诉你,@Scheduled 注释参数一旦设置就不能动态更改。我还建议重新构建问题以提供有关您的用例的更多信息。
  • 看看 Quartz 库,它可以帮助您完成所需的需求。

标签: java spring-boot cron crontrigger


【解决方案1】:

我将 @Scheduled 与 Quartz 一起使用。
@Scheduled 使用 CronExpression.isStatisfiedBy 每分钟检查一次 cron 表达式。
表达式可以是这样的:* 0/30 * * * ?,这意味着检查将在第 0 分钟和第 30 分钟完成,这就是我们需要每分钟检查的原因:因为它需要完全匹配那些特定的分钟。同样出于同样的原因,数据库中的 cron 表达式应排除秒数或以 * 开头。

@Scheduled(cron = "0 */1 * * * ?")
public checkSchedules() {
...
CronExpression cronExpression = new CronExpression(cronExpressionStringFromDB);
  if (cronExpression.isSatisfiedBy(new Date())) {
     //run stuff
  } 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-12
    • 2021-12-29
    • 2017-10-10
    • 1970-01-01
    • 2017-03-29
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多