来自 db 的多个 cron 表达式

multiple cron expressions from db

我有一个 Spring 启动应用程序,每小时有几个进程 运行。为此,我使用带有 cron 表达式的 @Scheduled。
现在我有一个更改请求,其中包括允许 UI 更改在 运行 时间内更改进程的频率,这是在数据库 table 中指定的,如下所示.

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

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

我将 @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
  } 
}