Quartz Trigger

来源:互联网 发布:阿里云服务器上传代码 编辑:程序博客网 时间:2024/05/22 15:43

Quartz中一个Job往往是一个任务业务逻辑的实现,Job并不知道何时被执行。执行一个Quartz Job的是一个Trigger实例。Trigger(触发器)的责任就是触发一个 Job 去执行。当用 Scheduler 注册一个 Job 的时候要创建一个 Trigger 与这个 Job 相关联。Quartz 触发器继承了Quartz框架中的org.quartz.Trigger类:

public abstract class Trigger implements java.io.Serializable, Cloneable, Comparable {}

public class SimpleTrigger extends Trigger {}

public class NthIncludedDayTrigger extends Trigger {}

public class CronTrigger extends Trigger {}


org.quartz.SimpleTrigger:

通过构造方法:

SimpleTrigger simpleTrigger = new SimpleTrigger("trigger", "tgroup");simpleTrigger.setRepeatInterval(1000);simpleTrigger.setRepeatCount(10);scheduler.scheduleJob(jobDetail, simpleTrigger);

通过TriggerUtils的静态方法实例化:

Trigger t=TriggerUtils.makeSecondlyTrigger(10);t.setName("trigger");t.setStartTime(new Date());scheduler.scheduleJob(jobDetail, t);

org.quartz.CronTrigger:

SimpleTrigger 对于需要在指定的毫秒处及时执行的作业还是不错的,但要处理更为复杂都执行计划时,CronTrigger 就显得更加灵活了,

通过构造方法

CronTrigger trigger=new CronTrigger("crontrigger",Scheduler.DEFAULT_GROUP,"* * * * * ?");//trigger.getJobDataMap().put("str", "Trigger-world");scheduler.scheduleJob(jobDetail, trigger);

通过xml:

<?xml version="1.0" encoding="UTF-8"?><job-scheduling-dataxmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"version="1.8"><schedule><job><name>hello</name><group>group</group><job-class>org.han.jobs.XLSJob</job-class></job><trigger><cron><name>trigger</name><group>group</group><job-name>hello</job-name><job-group>group</job-group><cron-expression>0 0 0 ? * *</cron-expression></cron></trigger></schedule></job-scheduling-data>

#===============================================================     
#Configure Main Scheduler Properties     
#===============================================================      
org.quartz.scheduler.instanceName = QuartzScheduler      
org.quartz.scheduler.instanceId = AUTO     
 
#===============================================================     
#Configure ThreadPool     
#===============================================================      
org.quartz.threadPool.threadCount = 5      
org.quartz.threadPool.threadPriority = 5      
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool     
 
#===============================================================     
#Configure JobStore     
#===============================================================      
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore     
 
#===============================================================     
#Configure Plugins     
#===============================================================      
org.quartz.plugin.jobInitializer.class =org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin     
 

#fileNames对应上面的xml文件名    
org.quartz.plugin.jobInitializer.fileNames = quartz_jobs.xml
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
org.quartz.plugin.shutdownhook.cleanShutdown =true



org.quartz.NthIncludedDayTrigger:

org.quartz.NthIncludedDayTrigger是Quartz开发团队在Quartz框架中新添加的一个触发器。它设计的目标是提供不同时间间隔的第n天执行时刻表。

NthIncludedDayTrigger ndt = new NthIncludedDayTrigger();ndt.setName(jd.getName()+"-Trigger");ndt.setIntervalType(NthIncludedDayTrigger.INTERVAL_TYPE_WEEKLY);ndt.setN(Calendar.MONDAY);ndt.setFireAtTime("12:00:00");Calendar c = Calendar.getInstance();ndt.setStartTime(c.getTime());