[译]Java定时任务调度-Quartz Cron 调度

cron是一个历史悠久的unix工具,它的调度能力无疑是很强的。CronTrigger类就是基于cron的调度能力。

Cron Trigger使用cron表达式,可以创建诸如“周一到周五的上午八点”或者“每个月最后一个周五的下午三点”之类的调度设置。

cron表达式很强大,但也会让人迷惑。本文旨在为创建cron表达式解惑,在用户不得不向论坛或者通过邮件向别人求助之前,提供些许帮助。

cron表达式是一个字符串,由6-7个字段组成,字段中间用空格隔开。每个字段可以包含以下值(或者值的组合):
[译]Java定时任务调度-Quartz Cron 调度_第1张图片

所以cron表达式可以简单的例如:* * * * ? *

也可以复杂的诸如:0/5 14,18.3-39,52 * ? JAN,MAR,SEP MON-FRI 2002-2010

特殊字符
* 表示字段范围内的所有值,例如分钟字段上的*表示每分钟;

? 表示不指定的随意值,通常用在一组限制中不限制的那个字段。例如配置每个月10号(并不在意是周几)执行的调度,在【Day of month】字段配置10,【Day of week】字段配置? 即可;

- 表示范围;

/ 表示依次递增,例如秒字段“0/15”表示从来0秒开始,每15秒调度,即0、15、30、45秒都调度;

L 表示最后一个,在不同的字段上有不同的含义。例如在【Day of month】上的L表示每个自然月的最后一天;在【Day of week】上如果单独使用,表示周日,但是如果用在另一个值之后,例如6L,则表示每个月的最后一个周六;也可以在L的基础上设置一个偏移量,例如L-3在【Day of month】就表示每个月的倒数第三天。使用L的时候,尽量不用要列举值、范围值,不然会出现意想不到的结果;

W 表示工作日,表示离指定日期最近的一个工作日。例如“15W”在【Day of month】表示离15号最近的一个工作日,如果15号是工作日,那么就是15号,如果15号是周六,那么15W就会取值14,如果15号是周日,那么15W就会取值16。但这里有一个例外,就是这里的浮动不会跨月,例如1号是周六,那么1W就不会取值上个月的最后一天,而是会在当月取值3号;

# 表示每个月的第几个周几。例如“6#3”表示第三个周五(注意,周日是每周的第一天,所以6表示周五)。当然如果配置5#,而没有第五个周几,那么调度永远也不会启动的;

这里有一些例子:
[译]Java定时任务调度-Quartz Cron 调度_第2张图片

原文:
http://www.quartz-scheduler.org/documentation/quartz-2.2.x/tutorials/crontrigger.html

你可能感兴趣的:(Java开源库)