Quartz 2.2.1 学习笔记(三) Trigger
来源:互联网 发布:手机怎么申请淘宝开店 编辑:程序博客网 时间:2024/05/09 23:33
ob与JobDetail是Quartz用来定义具体任务的,而Trigger则是用来定义任务如何执行的。Quartz提供了Trigger接口来定义公共属性,使用TriggerBuilder可以创建具体类型的Trigger;最常见的两种Trigger分别是SimpleTrigger、CronTrigger
Trigger的公共属性:
- key,该属性是为了标识Trigger的。
- startTime,Trigger第一次被Scheduler触发的时间;该属性的值是指定某个时间点的java.util.Date对象。
- endTime,Trigger不再被执行的时间。
- priority,优先级;通过设置优先级属性可以控制Trigger被执行的顺序,该属性默认值是5,可以为正整数也可以为负整数。需要注意的是,只有在触发时间相同时,优先级属性才会有效;比如10:59执行的任务总是会在11:00执行的任务之前执行;另外,如果Trigger是可恢复的,那么恢复后,优先级是不会改变的。
- misfire,如果因为某些原因,错过触发时间,就需要使用该属性来调整。不同类型的Trigger拥有不同的misfire,但是默认的是smart policy,这种情况下会根据Trigger的类型与配置来动态的调整行为。
- Calendars,该属性并不是java.util.Calendar类型,它的作用是排除某些时间,比如在周末不执行任务。Quratz的Calendar对象是一个实现了Calendar接口的序列化对象,Calendars接口如下:
package org.quartz; public interface Calendar { public boolean isTimeIncluded(long timeStamp); public long getNextIncludedTime(long timeStamp); }
Calendars必须实例化,然后通过Scheduler的addCalendar()方法注册。Calendars可以重复使用,如下代码:
Trigger trigger1 = TriggerBuilder.newTrigger() .withIdentity("trigger1", "test") .startAt(DateBuilder.futureDate(3, IntervalUnit.SECOND)) .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInMilliseconds(5000) .withIntervalInSeconds(5) .withRepeatCount(5)) .modifiedByCalendar("holidayCalendar") .build(); Trigger trigger2 = TriggerBuilder.newTrigger() .withIdentity("trigger2", "test") .startAt(DateBuilder.futureDate(3, IntervalUnit.SECOND)) .withSchedule(SimpleScheduleBuilder.simpleSchedule() .withIntervalInMilliseconds(5000) .withIntervalInSeconds(5) .withRepeatCount(5)) .modifiedByCalendar("holidayCalendar") .build();
SimpleTrigger
下面来看SimpleTrigger。通过之前的例子可以看到如何创建Trigger,首先通过TriggerBuilder.newTrigger()方法建立一个TriggerBuilder对象,然后通过withSchedule()方法指定了SimpleScheduleBuilder,最后build()方法构建出了SimpleTrigger对象。
SimpleTrigger很简单,之前例子中创建的都是SimpleTrigger,任务启动后每隔5s运行一次,总共运行5次。Quartz提供了DateBuilder工具类来方便设置时间,里面提供了很多方法,如上面Trigger2设置的启动时间就是3秒后启动任务。
SimpleTrigger很简单,之前例子中创建的都是SimpleTrigger,任务启动后每隔5s运行一次,总共运行5次。Quartz提供了DateBuilder工具类来方便设置时间,里面提供了很多方法,如上面Trigger2设置的启动时间就是3秒后启动任务。
CronTrigger
CronTrigger使用cron表达式来设置触发时间。CronTrigger创建方式:
Trigger trigger3 = TriggerBuilder.newTrigger() .withIdentity("cron trigger", "test") .withSchedule( //每5秒执行一次 CronScheduleBuilder.cronSchedule("0/5 * * ? * *") ).build();
cron表达式
cron表达式的格式为:秒 分 时 日 周 年;其中年是可选的,其它为必填。
每个属性允许的值:
每个属性允许的值:
- 秒, 0-59;
- 分,0-59;
- 时,0-23;
- 日,1-31;
- 周 ,1-7;
- 年,可选,1970-2099
- “/”:指定增加值;比如上面的”0/5”,意思就是从第0秒开始,然后每隔5秒执行一次。
- “*”:表示所有值;比如”5 * ? * *”,意思就是每一分钟的第5秒执行一次。
- “?”:没有指定具体值,表示某月的某一天或者每周的某一天;只能在”日”和”周”上使用”?”,而且必须使用”?”;比如”5 * * ? * “或”5 * * * ?”都是正确的且效果一样,而”5 * * * * *”则是错误的。
- “,”:表示多选;比如”1,2,3,5 * * ? * *”,意思就是每分钟的第1、2、3、5秒执行一次任务。
- “-“:表示范围;比如”1-5 * * ? * *”,意思就是每分钟的第1到5秒执行一次任务。
- “L”:只允许在”日”和”周”上使用,分别有不同的作用;如果在”日”上使用,则表示该月的最后一天,如:1月31日;如果在”周”上使用,则意味着7或者SAT;另外,如果数字和L在”周”上组合使用则有其它含义,如:”6L”,则代表当前月的最后一个星期五。L用在”日”上还可以指定偏移,如”L-3”,表示该月的第3天到最后一天。
- “W”:表示给定日期最近的工作日,只能用在”日”上面;例如:”15W”,表示每月15号最近的一个工作日,如果15号是周六,则在14号周五执行;如果15号是周日,则在16号周一执行。需要注意的是结合W使用时,不能使用范围,只能使用单个值。另外W也能和L联合使用,表示当月的最后一个工作日。
“#”:表示当月第几个周X,只能在”周”上使用;如:”1#3”,表示当月的第3个星期一。
0 0
- Quartz 2.2.1 学习笔记(三) Trigger
- Quartz 2.2.1 学习笔记(三) Trigger
- Quartz (三) Trigger
- Spring 整合 Quartz -实现 动态设定Trigger参数(三)
- Quartz学习笔记(1)
- Quartz学习笔记(三)—— TriggerListeners and JobListeners
- quartz 学习笔记 1
- Quartz Trigger
- quartz学习笔记三---cron表达式
- Quartz系列笔记(3)--Quartz API、Job和Trigger简介
- Quartz学习笔记1:Quartz概述
- Quartz学习之Lesson2-Quartz的API,Job和Trigger
- quartz----学习笔记(补充)
- Quartz学习笔记(2)
- 触发器(trigger)学习
- trigger调用(java)存储过程——HSQL_DB存储过程学习笔记(1)
- Quartz学习(三)--简单触发器(SimpleTrigger)
- quartz学习三
- 第3章 基本概念(1)语法 关键字和保留字 变量
- CSS3中的transform-origin的用法以及与perspective、perspective-orgin的不同
- 网易蜂巢ubuntu16.04 安装JDK1.7
- Linux安装PHP
- Springmvc @RequestMapping测试各种访问方式
- Quartz 2.2.1 学习笔记(三) Trigger
- 为什么招聘信息挂那么长,告诉你真相!
- Qt5 QSound的使用发现
- android屏幕转向onConfigurationChanged不执行的问题
- 关于struts漏洞之---/struts/webconsole.html
- 3.5.5
- HDU 1015 Safecracker
- 什么是App加壳,以及App加壳的利与弊
- C# 右键菜单注册表改写