项目地址:

https://github.com/yuleiqq/quartz_example/tree/master/quartz_study

目录

Cron 表达式

Cron 表达式示例

构建触发器


如果您需要一个基于日历类概念(而不是基于SimpleTrigger的精确指定间隔)递归的作业触发计划,那么CronTrigger通常比SimpleTrigger更有用。

使用CronTrigger,您可以指定休假时间表,如“每周五中午”或“每个工作日和上午9:30”,甚至“一月期间每周一、周三和周五上午9:00到10:00之间每5分钟”。

即便如此,与SimpleTrigger一样,CronTrigger也有一个startTime,用于指定计划生效的时间,以及一个(可选的)endTime,用于指定计划应该停止的时间。

Cron 表达式

cron表达式用于配置CronTrigger实例。cron -表达式实际上是由七个子表达式组成的字符串,它们描述了调度的各个细节。这些子表达式用空格隔开,表示:

  1. Seconds
  2. Minutes
  3. Hours
  4. Day-of-Month
  5. Month
  6. Day-of-Week
  7. Year (optional field)

完整的cron表达式的一个例子是字符串“0 0 12 ? * WED” —— 意思是“每周三下午12点”。

单个子表达式可以包含范围和/或列表。例如,可以用“MON-FRI”、“MON,WED,FRI”甚至“MON-WED,SAT”代替前面示例中的“星期几”字段(读作“WED”)。

通配符('*')可用于表示此字段的“每个”可能值。因此,前面示例中的“Month”字段中的“字符”仅表示“每个月”。因此,“星期几”字段中的“*”显然表示“一周中的每一天”。

所有字段都有一组可以指定的有效值。这些值应该相当明显——例如秒和分钟的数字0到59小时的数字 0到 23月日可以是任何值1-31,但是您需要注意一个月有多少天! 月可以指定值0到11之间,或通过使用字符串1月,2月,3月,4月,5月,6月,7月,8月,9月,10月,11月和12月Days-of-Week之间可以指定值1和7(1 = Sunday)或通过使用字符串的SUN, MON, TUE, WED, THU, FRI and SAT.

' / ' 字符可用于指定值的增量。例如,如果在分钟字段中输入“0/15”,它的意思是“每15分钟一次,从第0分钟开始”。如果您在分钟字段中使用“3/20”,那么它的意思是“每小时20分钟,从第3分钟开始”——或者换句话说,它与在分钟字段中指定“3,23,43”是一样的。请注意“/35”的微妙之处,并不是指“每35分钟”—而是指“一小时中的每35分钟,从第0分钟开始”—或者换句话说,与指定“0,35”相同。

'?'  字符允许用于月日和周日字段它用于指定“无特定值”。当您需要在两个字段中的一个中指定某些内容,而不是在另一个字段中指定某些内容时,这是非常有用的。请参阅下面的示例(以及CronTrigger JavaDoc)进行说明。

“L”字符允许用于月日和周日字段这个字符是“last”的简写,但它在两个字段中的含义各不相同。例如,day-of-month字段中的值“L”表示“该月的最后一天”——1月31日,非闰年2月28日。如果单独用于星期几字段,它的意思是“7”或“SAT”。但是如果在星期几字段的另一个值之后使用,它的意思是“这个月的最后xxx天”——例如“6L”或“FRIL”都表示“这个月的最后一个星期五”。您还可以指定一个月最后一天的偏移量,例如“L-3”,它表示日历月的倒数第三天。在使用“L”选项时,不要指定列表或值的范围,这很重要,因为您会得到混淆/意外的结果。

“W”用于指定最接近给定日期的工作日(周一至周五)。例如,如果您要指定“15W”作为day-of-month字段的值,其含义是:“最接近该月15日的工作日”。

“#”用于指定每月的“第n个”XXX工作日。例如,“6#3”或“FRI#3”在星期几字段中的值表示“每月的第三个星期五”。

下面是一些关于表达式及其含义的示例—您可以在JavaDoc中找到更多关于org.quartz.CronExpression的示例

Cron 表达式示例

CronTrigger示例1—创建一个简单地每5分钟触发一次的触发器的表达式

“0 0/5 * * * ?”

CronTrigger示例2—创建一个触发器的表达式,该触发器每隔5分钟触发一次,在1分钟之后的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时之间每半小时触发一次。请注意,触发器不会在上午10点,只是在8点,8点半,9点和9点半

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

请注意,有些调度要求过于复杂,无法用单个触发器来表示——例如“上午9点到10点之间每5分钟一次,下午1点到10点之间每20分钟一次”。此场景中的解决方案是简单地创建两个触发器,并将它们都注册到同一个作业中。

构建触发器

CronTrigger实例是使用TriggerBuilder(用于触发器的主要属性)和CronScheduleBuilder(用于特定于CronTrigger的属性)构建的。要在DSL风格中使用这些构建器,请使用静态导入:

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

每天早上8点到下午5点之间,每隔一分钟就设一个触发点:

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

建立一个触发器,每天上午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();

建立一个触发器,将在周三上午10:42分,指定一个时区:

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

或者

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

CronTrigger的失败指令

以下说明可用于通知Quartz,当CronTrigger发生故障时,它应该做什么。(在本教程的More About trigger一节中介绍了失败的情况)。这些指令被定义为CronTrigger本身上的常量(包括描述其行为的JavaDoc)。说明书包括:

CronTrigger的指令常量失火

MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY
MISFIRE_INSTRUCTION_DO_NOTHING
MISFIRE_INSTRUCTION_FIRE_NOW

所有的触发器都有Trigger.MISFIRE_INSTRUCTION_SMART_POLICY指令 可以使用,该指令也是所有触发器类型的默认值。CronTrigger将“smart policy”指令解释为MISFIRE_INSTRUCTION_FIRE_NOW。JavaDoc 的CronTrigger.updateAfterMisfire()方法解释了这种行为的确切细节。

在构建crontrigger时,您可以指定misfire指令作为简单调度的一部分(通过CronSchedulerBuilder):

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

CronTrigger 介绍相关推荐

  1. Quartz之Trigger

    浅谈Triiger Quartz中的触发器用来告诉调度程序作业什么时候触发.即Trigger对象是用来触发执行Job的.Trigger是Quartz框架中的核心接口,其最重要的两个实现类是CronTr ...

  2. Quartz.Net进阶之四:CronTrigger 详述

    以前都是将所有的内容放在一篇文章里,就会导致文章很长,对于学习的人来说,有时候这也是一个障碍.所以,以后我的写作习惯,我就会把我写的文章缩短,但是内容不会少,内容更集中.这样,学习起来也不会很累,很容 ...

  3. Spring 使用介绍(十二)—— Spring Task

    一.概述 1.jdk的线程池和任务调用器分别由ExecutorService.ScheduledExecutorService定义,继承关系如下: ThreadPoolExecutor:Executo ...

  4. Quartz 第六课 CronTrigger(官方文档翻译)

    CronTriggers使用的频率比SimpleTrigger跟高.如果需要schedule 中触发Job的方式类似于日历的形式而不是一个确定的是时间间隔,那就需要使用CronTrigger. 对于C ...

  5. 第七节:Trigger(SimpleTrigger、CronTrigger)哑火(MisFire)策略 :

    一. 简介 1. 什么是哑火 由于某些原因导致触发器(trigger)在该触发的时候没有得到触发,后续对应的解决策略即为哑火策略.(个人理解) 2. 哑火触发的条件 ①:所有的工作线程都在忙碌,导致某 ...

  6. Quartz 2.x 任务调度使用(CronTrigger)

    为什么80%的码农都做不了架构师?>>> Quartz 框架是一个全功能.开源的任务调度服务,可以集成几乎任何的 Java 应用程序-从小的单片机系统到大型的电子商务系统.Quart ...

  7. Quartz组件介绍

    Quartz是一个由java编写的开源的Job调度框架,下面对其进行一个比较详细的介绍 核心组件API介绍 调度流程分析 调度示例 核心组件API介绍 SchedulerFactory / Sched ...

  8. 万字长文简单明了的介绍xxl-job以及quartz

    前言 本文主要介绍分布式定时任务框架xxl-job,本文首先会对xxl-job做一个基本的介绍,接着将xxl-job与quartz做一个比较,最后就是介绍xxl-job调度的详细过程. xxl-job ...

  9. Quartz中Triggers介绍

    Trigger的公共属性 所有类型的trigger都有TriggerKey这个属性,表示trigger的身份:除此之外,trigger还有很多其它的公共属性.这些属性,在构建trigger的时候可以通 ...

  10. Quartz教程六--CronTrigger

    如果你需要的是基于日历表示法的调度,而不是基于指定间隔的简单调度,那么CronTrigger比SimpleTrigger更合适. 使用CronTrigger,你可以配置这样的调度:"每周五的 ...

最新文章

  1. html浏览位置坐标,HTML5教程 | HTML5地理定位(GeoLocation API)
  2. 成功解决VMware虚拟机中的please remove the installation medium then press enter
  3. Oracle 安装完怎么用,oracle 11g 安装完怎么用
  4. 比Redis快5倍的中间件,为啥这么快?
  5. Lync Server 2010迁移至Lync Server 2013故障排错 Part3 :内外网共享PPT提示证书问
  6. android studio一个页面等待3秒跳转_Flutter 对 iOS、Android(双端开发者)的快速理解(二)
  7. matlab中表示拉普拉斯分布_神奇的正态分布
  8. 美国签证过不了,ICLR 2020搬到埃塞俄比亚,同性恋学者:不去,保命要紧
  9. PHP htmlspecialchars() 函数
  10. 《计算机组成与CPU设计实验》实验6 彩灯控制器实验
  11. 唯美毕业论文答辩PPT模板
  12. leetcode | 整数反转
  13. Redisson框架官方介绍
  14. 个人实名认证的几种方案
  15. 怎么导出微信语音【亲测有效】
  16. 1098:质因数分解(信奥)
  17. android开发 问卷调查案例_安卓 问卷调查Demo 原生代码
  18. 基于低代码平台(Low Code Platform)开发中小企业信息化项目
  19. 统计字符串-第13届蓝桥杯Scratch省赛真题第5题
  20. opencv-python(cv2)——如何读取和保存中文路径图片(含代码)

热门文章

  1. SAS9.2安装及遇到的问题。安装时提醒Sas安装数据SID文件无效
  2. zmodem transfer canceled by remote side 段错误(吐核)
  3. Java算法面试题(005) 求n边形周长的k等分点坐标(今日头条)
  4. mysql odbc 卸载_Linux卸载MySQL
  5. 使用ubuntu内置桌面共享:vino,实现远程桌面
  6. 计算机专业小米笔记本推荐,小米笔记本哪款好
  7. latex服务器java_latex入门
  8. URI和URL的概念和区别
  9. oracle 模糊查询语法
  10. 计算思维与创新创业 课程 获批