Quartz一个Job绑定多个Trigger

2017/10/16 16:53
阅读数 5.1K

Code 1:

JobDetail jobDetail = new JobDetail(jobName, jobGroup, class1.getClass());  
  
// durable, 指明任务就算没有绑定Trigger仍保留在Quartz的JobStore中,  
jobDetail.setDurable(true);  
  
// 加入一个任务到Quartz框架中, 等待后面再绑定Trigger,  
// 此接口中的JobDetail的durable必须为true  
scheduler.addJob(jobDetail, false);  
  
Trigger trigger3 = TriggerUtils.makeMinutelyTrigger("trigger2", 10, SimpleTrigger.REPEAT_INDEFINITELY);  
  
// 使用scheduleJob(Trigger)加入的Trigger必须指明JobName与JobGroup  
trigger3.setJobName(jobName);  
trigger3.setJobGroup(jobGroup);  
scheduler.scheduleJob(trigger3); // 看这里  
  
Trigger trigger4 = TriggerUtils.makeSecondlyTrigger("trigger1", 5000, SimpleTrigger.REPEAT_INDEFINITELY);  
trigger4.setJobName(jobName);  
trigger4.setJobGroup(jobGroup);  
scheduler.scheduleJob(trigger4); // 看这里  

Code 2:

JobDetail jobDetail = new JobDetail(jobName, jobGroup, class1.getClass());  
Trigger trigger3 = TriggerUtils.makeMinutelyTrigger("trigger2", 10, SimpleTrigger.REPEAT_INDEFINITELY);  
Trigger trigger4 = TriggerUtils.makeSecondlyTrigger("trigger1", 5000, SimpleTrigger.REPEAT_INDEFINITELY);  
  
// 下面这个接口其实可以理解为先addJob(JobDetail, false)  
// 再调用scheduleJob(Trigger), 此时Quartz会自动校正与设置trigger3的JobName与JobGroup属性  
scheduler.scheduleJob(jobDetail, trigger3);  
  
// 因为任务已在上一条语句中已加入, 所以不能再使用scheduleJob(JobDetail, Trigger)  
trigger4.setJobName(jobName);  
trigger4.setJobGroup(jobGroup);  
scheduler.scheduleJob(trigger4); // 看这里  

总结: 每个任务JobDetail可以绑定多个Trigger,但一个Trigger只能绑定一个任务,这种绑定关系由四种接口来执行

Scheduler#scheduleJob(JobDetail, Trigger)

该接口的作用是在将任务加入Quartz的同时绑定一个Trigger,Quartz会在加入该任务后自动设置Trigger的JobName与JobGroup为该JobDetail的name与group;

Scheduler#scheduleJob(Trigger)

该接口的作用是将该Trigger绑定到其JobName与JobGroup指向的任务JobDetail。这时的name与group需要在Trigger绑定前由Quartz的使用者来设置与调用

Scheduler#rescheduleJob(String, String, Trigger)

替换一个指定的Trigger, 即解除指定Trigger与任务的绑定,并将新的Trigger与任务绑定,Quartz会自动调整新Trigger的JobName与JobGroup,而旧的Trigger将被移除

Scheduler#triggerJob(String, String)

创建一个立即触发的Trigger,并将其与name与group指定的任务绑定

JobDetail有个属性叫durable,表明该任务没有任何trigger绑定时仍保存在Quartz的JobStore中,默认为false。若JobDetail的durable属性为false,则任务将会从Quartz移除。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部