Quartz框架之cron表达式

Posted iaiti

tags:

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

目录

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表达式是六七个空格分隔的域组成的字符串。

字段名是否强制值域特殊字符
SecondsYES0-59, - * /
MinutesYES0-59, - * /
HoursYES0-23, - * /
Day of monthYES1-31, - * ? / L W
MonthYES1-12 or JAN-DEC, - * /
Day of weekYES1-7 or SUN-SAT, - * ? / L #
YearNOempty, 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 * * ? 20052005年的每天的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-20052002年到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 

以上是关于Quartz框架之cron表达式的主要内容,如果未能解决你的问题,请参考以下文章

quartz定时任务cron表达式详解

Spring Quartz如何动态配置时间(3)

quartz Cron表达式 每周执行一次要怎样写

quartz的CronExpression表达式详解和案例

quartz表达式介绍 Quartz介绍

quartz表达式介绍