Quartz Job Scheduling Framework[翻译]第五章. Cron 触发器及相关内容 (第一部分)

第五章. Cron 触发器及相关内容

我们在上章中有承诺过会花更多时间来讲 Quartz 的 CronTrigger,所以不会让你失望的。SimpleTrigger 对于需要在指定的毫秒处及时执行的作业还是不错的,但是假如你的作业需要更复杂的执行计划时,你也就要 CronTrigger 给你提供更强更灵活的功能。

一. Cron 的快速一课

cron 这一观念是来自于 UNIX 世界。在 UNIX 中,cron 是一个运行于后台的守护程序,它负责所有基于时间的事件。尽管 Quartz 除相同的名字和相似的表达式语法外,并未分享到 UNIX cron 别的东西,我们还是值得花几个段落去理解 cron 背后的历史。我们这里的目标不是搞混 UNIX cron 表达式和 Quartz 的 cron 表达式,但是你应该了解 Quartz 表达式的历史,并探索为什么他们运作起来很像。这儿明显有许多有意图的相似性。

有许多不同版本的 UNIX Cron你会发现不同版本的 cron,每一种都有些微地差异。我们仅着眼于与 Quartz CronTrigger 的比较,因此我们只讨论不同版本 UNIX cron 共性的东西。

UNIX cron 守护进程每隔一分钟被唤醒一次去检查叫做 crontabs 的配置文件。(CrontabCRONTABLE 的连写,其中配置有 cron 守护进程的作业列表和其他的指令。)守护进程检查存储在 crontabs 中的命令并决定是否有要执行的任务。

·UNIX Cron 的格式

你可以认为 UNIX crontab 是 Trigger 和 Job 的组合,因为它们同时列出来执行计划和要执行的命令(job)。

Cron Expression 的格式

crontab 格式包含六段,前五段为执行计划,第六段为要执行的命令。(Quartz cron 表达式有七段。) 下面这些是执行计划的五个字段:

    ·分 (00-59)

    ·时 (00-23)

    ·日 (1-31)

    ·月 (1-12)

    ·周 (0-6 或 sun-sat)

UNIX cron 格式表达式中允许出现一些特殊的字符,例如星号(*),它用来匹配所有值。这作有一个 UNIX crontab 的例子:

0 8 * * * echo "WAKE UP" 2>$1 /dev/console

这一 crontab 条目在每天早上8点打印字符串 "WAKE UP" 到 UNIX 的设置 /dev/console 上。图 5.1 显示了这个动作。

图 5.1. UNIX Cron 执行 0 8 * * * echo "WAKE UP" 2>$1 /dev/console  表达式

[点击看全图]
QuartzFigure5.1.jpg

2. 使用 Quartz CronTrigger

在现实世界里,作业计划通常比 SimpleTrigger 能支持的复杂得多。CronTrigger 就可用于指定非常复杂的计划,这种计划不错,因为也是我们发现需要这么做的。在我们深入到 CronTrigger 之前,让我们先看一个例子。代码 5.1 所示的是一个使用 CronTrigger (连同一个 Quartz cron 表达式) 来部署前面例子中的 PrintInfoJob。代码中的大部分内容与前面章节的例子相同。唯一不同点是我们使用了 CronTrigger 替代了 SimpleTrigger。正因为如此,我们不得不为它提供了一个 cron 表达式。

代码 5.1. 简单使用 CronTrigger 来部署一个 Job

代码 5.1 中的例子使用了如下 cron 表达式:

0 30 7 ? * MON-FRI

当被调度器解释后,它会引起 Trigger 在星期一至星期五的早上 7:30 被激发。让我们来看看 Quartz CronTrigger 的 cron 表达式的格式。

本文链接 https://yanbin.blog/quartz-job-scheduling-framework-5-1/, 来自 隔叶黄莺 Yanbin Blog

[版权声明] Creative Commons License 本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

Subscribe
Notify of
guest

16 Comments
Inline Feedbacks
View all comments