CronTrigger通常比Simple Trigger更有用,如果您需要基于日历的概念而不是按照SimpleTrigger的精确指定间隔进行重新启动的作业启动计划。

使用CronTrigger,您可以指定号时间表,例如“每周五中午”或“每个工作日和上午9:30”,甚至“每周一至周五上午9:00至10点之间每5分钟”和1月份的星期五“。

即使如此,和SimpleTrigger一样,CronTrigger有一个startTime,它指定何时生效,以及一个(可选的)endTime,用于指定何时停止计划。

Cron Expressions

Cron-Expressions用于配置CronTrigger的实例。Cron Expressions是由七个子表达式组成的字符串,用于描述日程表的各个细节。这些子表达式用空格分隔,并表示:Seconds

Minutes

Hours

Day-of-Month

Month

Day-of-Week

Year (optional field)

一个完整的Cron-Expressions的例子是字符串“0 0 12?* WED“ - 这意味着”每个星期三下午12:00“。

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

通配符(' '字符)可用于说明该字段的“每个”可能的值。因此,前一个例子的“月”字段中的“”字符仅仅是“每个月”。因此,“星期几”字段中的“*”显然意味着“每周的每一天”。

所有字段都有一组可以指定的有效值。这些值应该是相当明显的 - 例如秒和分钟的数字0到59,数小时的值0到23。日期可以是1-31的任何值,但是您需要注意在给定的月份中有多少天!月份可以指定为0到11之间的值,或者使用字符串JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV和DEC。星期几可以指定为1到7(1 =星期日)之间的值,或者使用字符串SUN,MON,TUE,WED,THU,FRI和SAT。

'/'字符可用于指定值的增量。例如,如果在“分钟”字段中输入“0/15”,则表示“每隔15分钟,从零开始”。如果您在“分钟”字段中使用“3/20”,则意味着“每隔20分钟,从三分钟开始” - 换句话说,它与“分钟”中的“3,243,43”相同领域。请注意“ / 35”的细微之处并不代表“每35分钟” - 这意味着“每隔35分钟,从零开始” - 或者换句话说,与指定“0,35”相同。

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

“L”字符允许用于月日和星期几字段。这个角色对于“最后”来说是短暂的,但是在这两个领域的每一个领域都有不同的含义。例如,“月”字段中的“L”表示“月的最后一天” - 1月31日,非闰年2月28日。如果在本周的某一天使用,它只是意味着“7”或“SAT”。但是如果在星期几的领域中再次使用这个值,就意味着“最后一个月的xxx日”,例如“6L”或“FRIL”都意味着“月的最后一个星期五”。您还可以指定从该月最后一天的偏移量,例如“L-3”,这意味着日历月份的第三个到最后一天。当使用'L'选项时,重要的是不要指定列表或值的范围,因为您会得到混乱/意外的结果。

“W”用于指定最近给定日期的工作日(星期一至星期五)。例如,如果要将“15W”指定为月日期字段的值,则意思是:“最近的平日到当月15日”。

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

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

Cron Expressions示例

CronTrigger示例1 - 创建一个触发器的表达式,每5分钟就会触发一次

“0 0/5 * * *?”

CronTrigger示例2 - 创建触发器的表达式,每5分钟触发一次,分钟后10秒(即上午10时10分,上午10:05:10等)。

“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:00,8:30,9:00和9:30

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

请注意,一些调度要求太复杂,无法用单一触发表示 - 例如“每上午9:00至10:00之间每5分钟,下午1:00至晚上10点之间每20分钟”一次。在这种情况下的解决方案是简单地创建两个触发器,并注册它们来运行相同的作业。

构建CronTriggers

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在TimeZone(系统默认值)之外触发: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 Misfire说明

以下说明可以用于通知Quartz当CronTrigger发生失火时应该做什么。(本教程“更多关于触发器”部分引入了失火情况)。这些指令定义为CronTrigger本身的常量(包括描述其行为的JavaDoc)。说明包括:

CronTrigger的Misfire指令常数MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY

MISFIRE_INSTRUCTION_DO_NOTHING

MISFIRE_INSTRUCTION_FIRE_NOW

所有触发器还具有可用的Trigger.MISFIRE_INSTRUCTION_SMART_POLICY指令,并且该指令也是所有触发器类型的默认值。“智能策略”指令由CronTrigger解释为MISFIRE_INSTRUCTION_FIRE_NOW。CronTrigger.updateAfterMisfire()方法的JavaDoc解释了此行为的确切细节。

在构建CronTriggers时,您可以将misfire指令指定为简单计划的一部分(通过CronSchedulerBuilder):trigger = newTrigger()

.withIdentity("trigger3", "group1")

.withSchedule(cronSchedule("0 0/2 8-17 * * ?")

..withMisfireHandlingInstructionFireAndProceed())

.forJob("myJob", "group1")

.build();

crontrigger java,CronTrigger相关推荐

  1. java timer cron_Java之旅--定时任务(Timer、Quartz、Spring、LinuxCron)

    在Java中,实现定时任务有多种方式.本文介绍4种.Timer和TimerTask.Spring.QuartZ.Linux Cron. 以上4种实现定时任务的方式.Timer是最简单的.不须要不论什么 ...

  2. Spring Boot 整合 Quartz 实现 Java 定时任务的动态配置

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 首先说下这次主题,动态配置.没接触过定时任务的同学可以先看 ...

  3. 几种任务调度的 Java 实现方法与比较--转载

    前言 任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务.本文由浅入深介绍四种任务调度的 Java 实现: Timer ScheduledExecutor 开源工具包 Quartz ...

  4. [BAT][JAVA]定时任务之-Quartz使用篇(通过这个配置可以知道在做Quartz的时候需要的jar文件/Cron表达式使用语法/常用Cron表达式)

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个, ...

  5. java调度:(一)几种任务调度的 Java 实现方法与比较

    转载自:http://www.oschina.net/question/129540_28053 综观目前的 Web 应用,多数应用都具备任务调度的功能.本文由浅入深介绍了几种任务调度的 Java 实 ...

  6. java 动态添加定时器_Spring整合Quartz实现动态定时器的示例代码

    一.版本说明 spring3.1以下的版本必须使用quartz1.x系列,3.1以上的版本才支持quartz 2.x,不然会出错. 原因:spring对于quartz的支持实现,org.springf ...

  7. 普通java程序怎样用cron_java – Spring cron vs普通cron?

    我正在尝试在遗留的Java / Spring / Hibernate项目中使用cron作业,所以我决定使用spring调度程序. 我希望myTask.doStuff在每个月的第一个星期日的12:00运 ...

  8. java 动态增加定时任务

    直接上代码 import org.apache.tools.ant.util.DateUtils; import org.quartz.CronTrigger; import org.quartz.J ...

  9. java 动态添加定时器_quartz实现任务动态增加和删除

    场景 这几天做项目的时候遇到了个状态自动切换的场景.该场景具体情况如下: 用户可以创建多个活动 活动有开始时间和结束时间 活动有个状态:未上线.未开始(上线但未到开始时间).进行中(上线且处于开始时间 ...

最新文章

  1. 部署通用基础设施, 满足顶级 SLA 要求
  2. (四十七)Quartz2D引擎初步
  3. 树形DP入门题目推荐以及解析
  4. mysql的隔离级别_MySQL的四种事务隔离级别
  5. Java爬虫技术(二)爬取京东iPhone商品信息并生成Json日志
  6. Normal Vector Using WorldInverseTranspose
  7. 广播网关GPC为MDS多媒体调度再添虎翼
  8. android怎么打开wifi的组播功能
  9. 弯下腰,拾起你无价的尊严
  10. 加密服务器显示到期,注册加密卡成功了,打开软件还是提示演示到期了,怎么解决?...
  11. 【2019牛客暑期多校训练营(第二场) - H】Second Large Rectangle(单调栈,全1子矩阵变形)
  12. 万用表测线路断点位置_如何测出电线电缆断点在哪?来看看常见的7种方法
  13. iOS判断是否有权限访问相机,相册,定位
  14. 独立游戏[永夜仙境]4人团虚幻4开发经验
  15. dede首页调用会员积分和头像代码
  16. echart 折线统计图
  17. python数据库操作——连接Oracle
  18. Obj-C的hello,world 1
  19. wpf-AvalonDock-使用技巧总结
  20. 永恒之蓝-MS17010 CVE-2017-0146

热门文章

  1. 部署 Job (第四部分)
  2. android快速点击分析
  3. linux中lamp架构搭建,Linux LAMP架构平台搭建
  4. 基于JAVA+SpringBoot+Mybatis+MYSQL的在线点餐系统
  5. 基于JAVA的IKAnalyzer中文分词运用
  6. 为什么要用BigDecimal
  7. [Ubuntu+opencv]Ubuntu18.04安装opencv3.4.3
  8. 通过fork进程爆破canary
  9. Oracle存储过程游标for循环怎么写
  10. Livebos--流程结束触发事件(修改表和表里的表格字段)