来自 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
}
}
我有一个 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
}
}