目录

1、简介

2、CronTrigger及cron表达式


1、简介

Quartz是多功能开源的任务调度库。主要的类有:

Scheduler - the main API for interacting with the scheduler. (与调度器交互的主API类)
 Job - an interface to be implemented by components that you wish to have executed by the scheduler.(调度器希望执行通过组件实现的接口)
 JobDetail - used to define instances of Jobs.(定义Jobs实例)
 Trigger - a component that defines the schedule upon which a given Job will be executed.(定义Job即将执行的计划任务组件)
 JobBuilder - used to define/build JobDetail instances, which define instances of Jobs.
 TriggerBuilder - used to define/build Trigger instances.// 定义job并绑定HelloJob class
 JobDetail job = newJob(HelloJob.class)
 .withIdentity("myJob", "group1") // name "myJob", group "group1"
 .build();// 触发任务现在执行然后每40秒执行一次
 Trigger trigger = newTrigger()
 .withIdentity("myTrigger", "group1")
 .startNow()
 .withSchedule(simpleSchedule()
 .withIntervalInSeconds(40)
 .repeatForever())
 .build();// quartz调度任务使用该触发器
 sched.scheduleJob(job, trigger);

2、CronTrigger及cron表达式

cron是unix定时任务工具,CronTrigger基于corn的计划任务功能,使用cron表达式。
cron表达式是六七个空格分隔的域组成的字符串。

字段名

是否强制

值域

特殊字符

Seconds

YES

0-59

, - * /

Minutes

YES

0-59

, - * /

Hours

YES

0-23

, - * /

Day of month

YES

1-31

, - * ? / L W

Month

YES

1-12 or JAN-DEC

, - * /

Day of week

YES

1-7 or SUN-SAT

, - * ? / L #

Year

NO

empty, 1970-2099

, - * /

最简单的表达式: * * * * * * ?

复杂点的表达式: 0/5 14,18,3-39,52 * ? JAN,MAR,SEP MON-FRI 2002-2010

特殊字符
* (“任何值”) - 在范围内的任意值,比如, “*” 在分钟字段表示 “每分钟”.

? (“无具体值”) - 在两个允许?字符字段中声明具体的其中一个,比如一个月的第10天,但是不用具体周几,那我周几的字段,便可以使用?

- 范围定义。比如, 在小时字段定义“10-12” 表示 “10, 11和12时”.

, 额外的值表示. 例如, “MON,WED,FRI” 在周几的字段中表示“周一,周三,周五”.

/ 定义递增. 例如, “0/15” 在秒字段表示 “ 0, 15, 30,和 45秒”. 和 “5/15” 在秒字段表示 “ 5, 20, 35 和 50秒”。
你也可以在*后面定义/, 这种情况下,*等于在/之前是0,1/3在月份字段表示一个月内每三天的第一天

L (“最后”) - 具有不同含义,在月份字段表示一个月的最后一天,如果用在周几字段的话,那就简单的代表7或者周六(外国的周日是每周的第一天)
,但是假如在另外一个值后面用于周几字段,表示这个月的最后xxx天,6L表示这个月的最后一个周五(同上,周日是每周第一天,周六是每周第七天)
你也可以定义从一个月最后一天的偏移量,像L-3表示第三天到最后一天,

W (“weekday”) - 用于声明在给定天数最近的周工作日,比如,在月第几天字段定义15w,表示在这个月15号最近的周工作日,如果15号是周六,
那触发的就是14号周五,如果15号是周日,那么触发的就是16号周一,如果15号是周二,那就是周二。如果是1w,刚好1号是周六,那么触发的是周一
这个月3号,不会越过月的界限。w只用于标明单独的一天,而不是一个范围或一系列日子。

L和W字符可以在一个月第几天字段组合成为LW,表示一个月的最后一个工作日。

# 用于声明 一个月的第几天,6#3在一周第几天字段表示表示这个月的第三个周五,day6表示周五,#3表示一个月的第三个, 2#1表示第一个周一,
4#5表示一个月的第五个周三

秒 分 时 月第几天 月份 周几 年份

表达式

含义

0 5  0 * * ?

每天凌晨0点05分

0 0 12 * * ?

每天12点

0 10 * * * ?

每天每小时的10分

0 15 10 ? * *

每天的10点15分

0 15 10 * * ?

每天的10点15分

0 15 10 * * ? *

每天的10点15分

0 0 */2 * * ?

每隔2小时执行,这里还需要是能被2整除的小时数

0 15 10 * * ? 2005

2005年的每天的10点15分

0 * 14 * * ?

每天14点里的每分钟,14点开始到14点59分的每分钟

0 0/30 * * * ?

每天0点开始,每隔30分钟,j即半个小时执行一次

0 0/5 14 * * ?

每天14点开始,每隔5分钟,到14点55分

0 0/5 14,18 * * ?

每天14点开始,每隔5分钟,到14点55分,还有18有点开始,每隔5分钟,到18点55分

0 0-5 14 * * ?

每天14点开始到14点05分的每分钟

0 10,44 14 ? 3 WED

每年3月份每周三每天14点10分和14点44分

0 15 10 ? * MON-FRI

周一到周五每天10点15分

0 15 10 15 * ?

每个月15号10点15分

0 15 10 L * ?

每个月最后一天10点15分

0 15 10 L-2 * ?

每个月第二天到最后一天10点15分

0 15 10 ? * 6L

每月最后一个周五的10点15分

0 15 10 ? * 6L 2002-2005

2002年到2005年每月最后一个周五的10点15分

0 15 10 ? * 6#3

每月第三个周五的10点15分

0 0 12 1/5 * ?

每月每五天的第一天的12点

0 11 11 11 11 ?

11月11号11点11分

参考链接: Tutorial 1