关于Cron表达式和quartzmanage

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Cron表达式和quartzmanage相关的知识,希望对你有一定的参考价值。

1. Cron表达式解释一下,不要是从网上的直接Copy过来。最好是自己写出来的心得。2. quartzmanage实现定时任务的同时时候,具体是怎么实现数据库中数据锁定的,最好能有点核心代码(通过Spring配置)。谢谢!

参考技术A 什么东西

在接下来的 n 小时内每五分钟的 Cron 表达式?

【中文标题】在接下来的 n 小时内每五分钟的 Cron 表达式?【英文标题】:Cron expression for every five minutes in the next n hours? 【发布时间】:2013-10-01 14:36:19 【问题描述】:

我知道每五分钟是:

0 0/5 * * * *

但是我如何限制发生这种情况的小时数?

示例:接下来的 10 小时每五分钟一次。

【问题讨论】:

【参考方案1】:

使用范围运算符指定小时数。例如,从凌晨 2 点开始每 5 分钟运行一次作业,持续 10 小时:

0 0/5 2-12 * * *

这是一个关于 Cron 表达式和运算符的优秀教程: http://www.quartz-scheduler.org/documentation/quartz-2.x/tutorials/crontrigger.html

编辑:2016 年 10 月 3 日:更新了链接。

【讨论】:

更新了链接。【参考方案2】:

如果您可以通过编程方式访问正在运行您的 cron 表达式的 CronTrigger,那么您可以使用计算出的时间范围调用方法 setStartTimesetEndTime

或者,您可以动态构建 cron 表达式并指定计算的小时范围。

例如,如果您在上午 9 点启动服务器,则可以在运行时创建此表达式0 0/5 9-19 * * *

【讨论】:

【参考方案3】:

我认为应该能够定义一个可以每小时重复一次的触发器,直到某个时间:

import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.TriggerBuilder.newTrigger;

...

Trigger myTrigger = newTrigger()
                    .withIdentity('myUniqueTriggerID")
                    .forJob(myJob)
                    .startAt(startDate)
                    .endAt(endDate)
                    .withSchedule(simpleSchedule().withIntervalInHours(1));

...

scheduler.scheduleJob(myJob, myTrigger);

【讨论】:

这是一个有效的答案。问题是我的代码是处理石英 API 的 EJB 的客户端。我只能提供 startTime 和 cron 表达式。 看来我不能用一个 cron 表达式做我想做的事。 不确定我是否完全理解这个问题。您能否提供更详细的问题解释?此外,也许您可​​以使用 - 特殊字符来定义间隔。看看quartz-scheduler.org/api/2.0.0/org/quartz/CronExpression.html 我无法控制石英 API。我只是调用一个接收 startTime(日期对象)和 cron 表达式的 EJB。是的,最后我使用“-”计算我应该在那里设置的范围。还在考虑这里的特殊情况......比如在计算范围内从一天切换到另一天。 在一般情况下(可以访问石英 API),您的答案是正确的。

以上是关于关于Cron表达式和quartzmanage的主要内容,如果未能解决你的问题,请参考以下文章

Quartz 和 springboot schedule中的cron表达式关于星期(周几)的不同表示

Quartz 和 springboot schedule中的cron表达式关于星期(周几)的不同表示

需要 CRON 作业表达式来触发半秒

详解定时任务中的 cron 表达式

在接下来的 n 小时内每五分钟的 Cron 表达式?

Cron(表达式)详解