quarzt(官方)---给自己看的文档(CronTrigger)

第6课:CronTrigger

CronTrigger通常比SimpleTrigger更有用,如果您需要一个基于日历的概念重复的作业启动计划,而不是SimpleTrigger的精确指定的间隔。

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

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

Cron表达式

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

  1. 秒数
  2. 分钟
  3. 小时
  4. 月日
  5. 星期几
  6. 年份(可选字段)

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

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

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

所有字段都有一组可以指定的有效值。 这些值应该是相当明显的 - 例如秒和分钟的数字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表达式

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点之间每半小时触发一次。 请注意,触发器将不会在上午10点开始,仅在8:00,8:30,9:00和9:30

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

请注意,一些调度要求太复杂,无法用单个触发器表示 - 例如“每上午9:00至10:00之间每5分钟,以及下午1:00至10:00之间每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失火说明

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

CronTrigger的失火指令常数

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();
时间: 2024-08-25 15:44:27

quarzt(官方)---给自己看的文档(CronTrigger)的相关文章

发现在看完objc基本语法之后,还是看Apple文档比较有用。

现在已经停止找中文资料了,因为很多例子已经过时,运行不出来. 看完objc基本语法以后,Apple的资料也看得懂了. 还是应该跟着Apple的入门指南开始学,今后也应该以Apple的文档为主. 发现在看完objc基本语法之后,还是看Apple文档比较有用.,布布扣,bubuko.com

Firefly官方教程之DBentrust使用文档

1.dbentrust说明 该模块主要是对数据库与memcached存储的处理.里面封装了从memcached数据到python对象的映射.可以以操纵python对象的方式进行memcached中存储的数据的操作,只要在不同的进程中实例化相同名称的memobject对象,就能保证对象中的数据是一致的.还包含了将这个对象中的数据同步到数据库的处理方法. 2.结构解析 <ignore_js_op> MemObject类规定了数据的格式,所有的数据都存储在memcached中,为了区分不同的数据,每

Firefly官方教程之Distributed使用文档

distributed使用文档1.distributed说明该模块主要封装了各个服务进程间进行通信的方法.node子节点域root根节点进程中的接口调用返回的都是延迟对象.关于延迟对象的使用,详见twisted中Deferred对象.2.结构解析 <ignore_js_op> PBRoot,root节点对象ChildsManager,子节点管理基类Child对象对应的是连接到本服务进程的某个服务进程对象.称为子节点对象RemoteObject远程调用对象,子节点服务进程中实现.可以通过这对象去

Firefly官方教程之Netconnect使用文档

1.distributed说明该模块包含了服务端与客户端通信的一些处理方法,包括发送数据的封装,协议头的封装,tcp通信时进行分包,处理粘包问题.2.结构解析 LiberateFactory,协议工厂,所有连接的本质,服务端与客户端通信的这一行为的形象化,它包含三个部分:1)LiberateProtocol,通信协议类,连接建立.断开后的操作,发送数据等都由它来控制2)DataPackProtoc,数据包协议的定义,所有的数据解析都要遵守它定制的规则3)ConnectionManager,连接管

谈谈WebService开发-应用篇(三)-教你如何看WSDL文档

作为webservice客户端开发,在日常工作中可能经常会拿到一个对方提供的wsdl地址或文档,那么拿到这个地址后我们如何编写客户端调用代码呢,前面几篇只是以个人经验的方式写了下,那么真正要根据wsdl文档来编写客户端调用代码就必须学会看懂wsd文档.下面就结合之前的demo来深入剖析下wsdl文档,最后以图解的方式形象说明下. 本文以之前的SayHello的Demo来深入分析下wsdl文档的几个部分,个人认为可以共分6部分,下面分别介绍: <definitions/> 这部分在基础篇里已经介

如何快速掌握官方提供的java API文档使用技巧

API的特点就是查阅方便,无需购买任何书籍,通过在线API文档官方网站,就可以随时随地查看JDK文档(即API文档),为编程提供极大的便利,节省了大量的时间.在线API文档的具体使用方法如下: 1.打开浏览器(任何一个浏览器都可以) 2.在搜索框输入java api,单击“百度一下”进行搜索 3.搜索完成后,鼠标下滑就能看到“在线API文档”字样了,单击超链接即可进入网站 4.进入网站后,直接单击“常用API文档索引”下面的java咖啡图标,进入文档 5.下面这个页面就是java api文档主页

quarzt(官方)---给自己看的文档(TriggerListeners和JobListeners)

侦听器是您根据调度程序中发生的事件创建的对象. 您可能会猜到, TriggerListeners会接收与触发器相关的事件, JobListeners会接收与作业相关的事件. 触发器相关的事件包括:触发器触发,触发失灵(在本文档的"触发器"部分中讨论),并触发完成(触发器关闭的作业完成). org.quartz.TriggerListener接口 public interface TriggerListener { public String getName(); public void

quarzt(官方)---给自己看的文档(SimpleTrigger)

第5课:SimpleTrigger SimpleTrigger应该满足您的调度需求,如果您需要在特定时刻或特定时刻执行完整的作业,然后按特定间隔进行重复. 例如,如果您希望触发器在2015年1月13日正好11:23:54 AM触发,或者如果您希望在那时开火,然后每十秒钟再次触发五次. 有了这个描述,您可能会发现SimpleTrigger的属性包括:开始时间,结束时间,重复计数和重复间隔,可能并不奇怪. 所有这些属性正是您期望的属性,只有与结束时间属性相关的几个特殊说明. 重复计数可以为零,正整数

【转】看C++文档的小知识

转载:http://www.ggv.com.cn/forum/clib/ctype/isspace.html 函数isspace 原型:extern int isspace(int c);    用法:#include <ctype.h>    功能:判断字符c是否为空白符    说明:当c为空白符时,返回非零值,否则返回零.  空白符指空格.水平制表.垂直制表.换页.回车和换行符.    举例: // isspace.c #include <syslib.h> #include