目录
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