Quartz教程六--CronTrigger

最新推荐文章于 2019-07-15 11:25:24 发布
转载 最新推荐文章于 2019-07-15 11:25:24 发布 · 774 阅读
· 0
· 0
文章标签:

#Quartz

Quartz 专栏收录该内容
9 篇文章
订阅专栏
本文详细介绍了Quartz中CronTrigger的使用方法,包括如何配置复杂的调度规则,如指定每周五中午执行任务等。此外还提供了创建CronTrigger的具体示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录
0. Quartz教程–快速入门
1. Quartz教程一–使用Quartz
2. Quartz教程二–API、Job与Trigger
3. Quartz教程三–Job与JobDetail介绍
4. Quartz教程四–Trigger介绍
5. Quartz教程五–SimpleTrigger
6. Quartz教程六–CronTrigger
7. Quartz教程七–TriggerListener和JobListener
8. Quartz教程八–SchedulerListener

如果你需要的是基于日历表示法的调度,而不是基于指定间隔的简单调度,那么CronTrigger比SimpleTrigger更合适。

使用CronTrigger,你可以配置这样的调度:“每周五的中午”,或者“每个工作日的上午9:30”,或者“在一月的每个周一、周三和周五的上午9点到10点之间每隔5分钟”。

与SimpleTrigger一样,CronTrigger需要设置startTime属性,表示调度生效的时间,以及(可选的)endTime属性,表示调度的结束时间。

Cron表达式

Cron表达式用于配置CronTrigger的实例,它由7个字段组成,字段之间由空格分开,它们表示的含义如下:

1. 秒 (Seconds)
2. 分钟 (Minutes)
3. 小时 (Hours)
4. 日(一个月的一天) (Day-of-Month)
5. 月份   (Month)
6. 周(一周的一天) (Day-of-Week)
7. 年份(可选的) (Year)

一个完整的Cron表达式的例子如字符串:”0 0 12 ? * WED” - 表示“每周三的中午12:00:00”;

每一个字段可以包含范围或者列举。比如,上例中的周字段(即”WED“)可以被替换为:”MON-FRI”, “MON,WED,FRI”, 或者”MON-WED,SAT”。

通配符()表示该字段上每一个可取的值。因此,上例中月字段上的表示“每个月”。周字段上的*表示“一周的每一天”。

所有的字段都有一些可取的值的集合。有些就很明显 - 比如,秒和分钟字段可以取0到59的整数,小时字段可以取0到23的整数,日字段(Day-of-Month)可以取1到31的整数,不过你需要注意指定的月份到底有多少天。月字段可以取0到11之间的整数,或者使用字符串表示:JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV 和 DEC。周字段(Days-of-Week)可以取的值为1到7(1表示Sunday),或者使用字符串表示:SUN, MON, TUE, WED, THU, FRI and SAT。

字符‘/’表示增量。比如,分钟字段使用”0/15“,表示”在这个小时内,从0分钟开始,每隔15分钟“;如果分钟字段使用”3/20“,则表示”在这个小时内,从第3分钟开始,每隔20分钟“,这与在分钟字段使用“3,23,43”表示的含义是一样的。注意一个细节,“/35”的含义并不是“每隔35分钟”,而是“在这个小时内,从第0分钟开始,每隔35分钟”。

字符’?’可以用于日字段和周字段,表示“没有具体的值“。它主要用于在这两个字段的某一个中指定某个值,更好的理解请参考下面的示例(以及CrontTrigger的JavaDoc)。

字符’L’可以用于日字段和周字段,它是last的缩写,但是用于这两个字段时,含义并不相同。比如,“L”用于日子段,表示“这个月的最后一天” - 即一月的第31天,非闰年二月的第28天。如果‘L’单独用于周字段,它的含义就是“7”或者“SAT”。但是,如果‘L’用于周字段时,前面还有一个值,则表示“这个月的最后一个周××” - 比如,“6L”或“FRIL”表示“这个月的最后一个周五”。我们也可以指定与这个月最后一天的偏移量,比如“L-3”表示与这个月的最后一天相差3天。需要注意的是,如果使用选项‘L’,则不要使用列举和范围,否则结果将是不可预料的。

字符’W’表示离某一天最近的工作日(weekday)。例如,日字段上的值“15W”表示“离这个月的15号最近的工作日”。

字符’#’表示“这个月的第n个周××”。例如,在周字段上的“6#3”或“FRI#3”表示“这个月的3个周五”。

以下为一些表达式的例子及对应的含义 - 在org.quartz.CronExpression的JavaDoc有更多的描述。

Cron表达式示例

CronTrigger示例1 - 每隔5分钟执行一次:

0 0/5 * * * ?

CronTrigger示例2 - 每隔5分钟,且在该分钟的第10秒执行(如10:00:10 am, 10:05:10 am等):

10 0/5 * * * ?

CronTrigger示例3 - 每周三和周五的10:30, 11:30, 12:30和13:30执行:

0 30 10-13 ? * WED,FRI

Crontrigger示例4 - 在每个月的第5天和第20天,上午8点到上午10点之间每隔半小时执行。注意:该trigger不会在上午10点执行,只在上午8:00, 8:30, 9:00和9:30执行:

0 0/30 8-9 5,20 * ?

提示一下,有些调度需求太复杂了,无法使用一个trigger表达 - 比如:“在上午9点和上午10点之间,每隔5分钟执行一次,且在下午1点到下午10点之间每隔20分钟执行一次”。应对这样的需求,可以创建两个trigger,注册到同一个job上即可。

创建CronTrigger

CronTrigger实例可以通过TriggerBuilder(配置主要属性)和CronScheduleBuilder(配置CronTrigger专有的属性)配置。为了以DSL风格使用这些builder,需要静态导入:

import static org.quartz.TriggerBuilder.*;
import static org.quartz.CronScheduleBuilder.*;
import static org.quartz.DateBuilder.*:

构建一个trigger,在每天的上午8点到下午5点之间每隔2分钟执行一次,如:

 trigger = newTrigger()
    .withIdentity("trigger3", "group1")
   .withSchedule(cronSchedule("0 0/2 8-17 * * ?"))
   .forJob("myJob", "group1")
    .build();

构建一个trigger,每天上午10:42执行:

trigger = newTrigger()
    .withIdentity("trigger3", "group1")
   .withSchedule(dailyAtHourAndMinute(10, 42))
   .forJob(myJobKey)
 .build();

或者:

trigger = newTrigger()
    .withIdentity("trigger3", "group1")
   .withSchedule(cronSchedule("0 42 10 * * ?"))
  .forJob(myJobKey)
 .build();

构建一个trigger,在每周三的上午10:42执行,并配置TimeZone:

trigger = newTrigger()
 .withIdentity("trigger3", "group1")
   .withSchedule(weeklyOnDayAndHourAndMinute(DateBuilder.WEDNESDAY, 10, 42)
      .inTimeZone(TimeZone.getTimeZone("America/Los_Angeles")))
 .forJob(myJobKey)
 .build();

或者:

trigger = newTrigger()
 .withIdentity("trigger3", "group1")
   .withSchedule(cronSchedule("0 42 10 ? * WED")
     .inTimeZone(TimeZone.getTimeZone("America/Los_Angeles")))
 .forJob(myJobKey)
 .build();

CronTriggter错过触发策略

下面的这些策略用于告诉Quartz,如果CronTrigger错过触发时应该采取的处理方式。(关于错过触发的场景,在本教程的Trigger介绍部分以经介绍过)。这些策略值是定义在CronTrigger上的常量,包括:

MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY
MISFIRE_INSTRUCTION_DO_NOTHING
MISFIRE_INSTRUCTION_FIRE_NOW

所有的trigger都可以使用Trigger.MISFIRE_INSTRUCTION_SMART_POLICY策略,该策略也是所有trigger的默认策略。在CronTrigger中,smart policy策略其实就是MISFIRE_INSTRUCTION_FIRE_NOW. CronTrigger.updateAfterMisfire()的API文档中对该策略有更详细的解释。

在构造CronTrigger时,将错过触发策略作为调度的一部分进行配置(通过CronScheduleBuilder):

trigger = newTrigger()
 .withIdentity("trigger3", "group1")
   .withSchedule(cronSchedule("0 0/2 8-17 * * ?")
            .withMisfireHandlingInstructionFireAndProceed())
  .forJob("myJob", "group1")
    .build();
  • Lesson 6: CronTrigger

转载地址 http://nkcoder.xyz/2018/01/20/quartz-tutorial-06-crontrigger/
确定要放弃本次机会?
福利倒计时
: :

立减 ¥

普通VIP年卡可用
立即使用
神殇彡
关注 关注
  • 0
    点赞
  • 踩
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
  • 分享
    复制链接
    分享到 QQ
    分享到新浪微博
    扫一扫
  • 举报
    举报
专栏目录
Quartz的CronTrigger
实践求真知
11-17 3492
一 点睛 1 CronTrigger的作用 基于日历的作业调度 不是像SimpleTrigger那样精确指定时间间隔 比SimpleTrigger更常用 2 Cron表达式 用于配置CronTrigger实例 是由7个子表达式组成的字符串,描述了时间表的详细信息。 格式:[秒] [分] [小时] [日] [月] [周] [年] 3 Cron表达是特殊字符意义对应表 4 特殊字...
Quartz之CronTrigger
code_lab
03-17 938
任务和触发器是quartz的两大块核心。触发器分CronTrigger 和SimpleTrigger  CronTrigger 支持比 SimpleTrigger 更具体的调度,而且也不是很复杂。基于 cron 表达式,CronTrigger 支持类似日历的重复间隔,而不是单一的时间间隔 —— 这相对 SimpleTrigger 而言是一大改进。掌握CronTrigger,是非常必要,掌握Q
参与评论 您还未登录,请先 登录 后发表或查看评论
关于quartz中CronTrigger的使用说明
12-16
quartz中CronTrigger的使用方法,列举了比较详细的例子。希望对你有所帮助。
Quartz——CronTrigger触发器
xiatianba的专栏
05-05 864
转载请出自出处:http://eksliang.iteye.com/blog/2208295 一.概述 CronTrigger 能够提供比 SimpleTrigger 更有具体实际意义的调度方案,调度规则基于 Cron 表达式,CronTrigger 支持日历相关的重复时间间隔(比如每月第一个周一执行),而不是简单的周期时间间隔。 二.Cron表达式介绍 1)Cron表达式规则表 Q...
quartz-2.2.3-distribution.tar.gz
06-15
接着,定义触发器,如`CronTrigger`,并关联到作业。最后,通过`Scheduler`实例安排任务并启动调度器。 在实际应用中,Quartz常用于发送定期邮件、数据同步、清理任务等场景。例如,你可以创建一个定时任务,每天...
quartz-2.3.0-distribution.tar.gz
03-27
Quartz 提供了多种 Trigger 类型,如 SimpleTrigger(单次或重复执行)和 CronTrigger(基于 Cron 表达式的时间间隔执行)。 3. **Scheduler(调度器)**:负责管理和执行 Jobs 以及 Triggers。通过 Scheduler 实例...
quartz-all-1.6.0.jar包定时任务jar
06-21
Quartz提供多种Trigger类型,如SimpleTrigger(一次性执行或按固定间隔重复执行)、CronTrigger(根据Cron表达式执行,类似于Linux的crontab)等。开发者可以根据需求选择合适的Trigger类型,并设置其属性。 3. **...
quartz-2.3.0-distribution.zip
09-09
- 定义Trigger,决定Job的执行时间,可以是SimpleTrigger或CronTrigger。 - 将Job和Trigger注册到Scheduler,通过`Scheduler.scheduleJob()`方法。 - 启动Scheduler,通过`Scheduler.start()`方法。 6. **Quartz...
quartz和spring-quartz
03-18
在提供的文件中,“quartz的入门.doc”可能是Quartz的基础教程,介绍如何创建和调度Job;“spring的quartz应用.txt”可能包含Spring-Quartz的具体使用示例和注意事项;“spring-quartz-demo”可能是一个完整的示例...
Quartz-CronTrigger
litengbin的博客
04-10 790
 CronTrigger 是什么? Cron 是Linux下的一个定时器,功能很强大,但是表达式更为复杂CronTrigger 就是用 Cron 表达式来安排触发时间和次数的。因为Cron 特别复杂,如果以前接触过,可以按照Cron表达式来做触发器,没有接触过,还是用SimpleTrigger吧。。。  TestQuartz 这个Cron 表达式就表示每隔2秒执行一次0/2 * * * * ?如图...
Spring+Quartz实现任务调度 定时执行
大连 云鹏
11-28 174
直接入题 个人记录 环境是Spring 3.1 Quartz是1.8.6 这里需要注意的一点是,在我下载Quartz的时候,我去官网下载了最新版本2.1.x,但是会报错,通过Google查询了一下,说必须降级到1.8.x的版本。具体原因就不知道为什么了 错误如下 java.lang.IncompatibleClassChangeError: class org.springfram...
【Quartz】CronTrigger
习惯成自然
06-17 654
介绍   任务调度有两种方式:SimpleTrigger和CronTrigger。比较常用的是CronTrigger,它更灵活。   CronTrigger可以设置一个重复的任务调度计划,如:每周五12:00执行一次任务。 示例 //使用simpleTrigger规则,每下一分钟执行一次 Trigger trigger = newTrigger().withIdentity("...
初识Quartz之CronTrigger
carson0408的博客
04-10 541
        之前已经介绍过Trigger组件,但主要是SimpleTrigger,而SimpleTrigger触发器功能相当于一个Timer的功能。而真正体现出Quartz优于Timer的一点就是CronTrigger的使用。CronTrigger是基于日历的作业调度器,而不像SimpleTrigger那样精确地指定时间间隔。这使得调度更加灵活。1.Cron表达式        说起CronT...
Quartz:CronTrigger-06
小贺的博客
07-15 284
CronTrigger通常比Simple Trigger更有用,如果您需要基于日历的概念而不是按照SimpleTrigger的精确指定间隔进行重新启动的作业启动计划。 使用CronTrigger,您可以指定号时间表,例如“每周五中午”或“每个工作日和上午9:30”,甚至“每周一至周五上午9:00至10点之间每5分钟”和1月份的星期五“。 即使如此,和SimpleTrigger一样,CronTr...
Quartz-CronTrigger解读
热门推荐
小工匠
10-08 1万+
概述 Cron表达式的组成 cron表达式中的问号 的含义 1当星期和日期都为或数字时报错 2当星期和日期都为时报错 时间格式 特殊字符 Cron 表达式样例 CronTrigger 样例 1 时钟从 0 分钟开始每 5 分钟执行一次 CronTrigger 样例 2 时钟从 0 分钟开始每 5 分钟执行一次并且秒钟是 10例如 100010 am 100510 am 等 CronTrigger
Quartz CronTrigger配置及使用
dickysun1987的专栏
03-09 717
CronTrigger配置格式及使用
Java Quartz定时任务库quartz-all-1.6.0.jar详解
- Trigger:定义调度计划,如何时执行任务,可以是SimpleTrigger或CronTrigger。 - Scheduler:Quartz调度器,负责管理工作,如添加、删除、暂定和恢复Trigger,以及执行Job。 3. Quartz配置: Quartz可以通过多种...
神殇彡

博客等级

码龄15年
11
原创
11
点赞
33
收藏
7
粉丝
关注
私信

TA的精选

  • 新 Spring Cloud Gateway 内存溢出解决过程

    18533 阅读

  • 新 Spring Cloud Data Flow 中文版参考文档

    2060 阅读

  • 热 python django 添加前台页面

    3043 阅读

  • 热 python django模版渲染页面

    2333 阅读

  • 热 python django 工作流程

    1598 阅读

查看更多

2019年2篇
2018年9篇
2015年2篇
2013年7篇

分类专栏

  • Quartz
    9篇
  • JMS
    2篇
  • Python
    6篇
  • spring cloud
    1篇
  • gateway
    1篇
  • oom
    1篇

展开全部 收起

上一篇:
Quartz教程五--SimpleTrigger
下一篇:
Quartz教程七--TriggerListener和JobListener

目录

展开全部

收起

目录

展开全部

收起

上一篇:
Quartz教程五--SimpleTrigger
下一篇:
Quartz教程七--TriggerListener和JobListener

分类专栏

  • Quartz
    9篇
  • JMS
    2篇
  • Python
    6篇
  • spring cloud
    1篇
  • gateway
    1篇
  • oom
    1篇

展开全部 收起

目录

评论
被折叠的  条评论 为什么被折叠? 到【灌水乐园】发言
查看更多评论
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值