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-data
xmlns="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());