[英]how handle two triggers to same quartz scheduler
I have quartz scheduler and I have created a trigger for specified time(Every day). 我有石英调度程序,并且已经为指定的时间(每天)创建了一个触发器。 And I also created another trigger for another specified time (Every three months once)
我还为另一个指定的时间(每三个月一次)创建了另一个触发器
Below is my code to schedule two triggers to single scheduler. 下面是我的代码,用于将两个触发器安排到单个计划程序中。
Scheduler sch = new StdSchedulerFactory().getScheduler();
JobDetail jobDetail = JobBuilder.newJob(MFRScheduler.class)
.withIdentity("firstJob", "group1").build();
JobDetail jobDetail1 = JobBuilder.newJob(MFRScheduler.class)
.withIdentity("cleanTrigger", "group2").build();
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("firstJob", "group1")
.withSchedule(
CronScheduleBuilder.cronSchedule(schduledTime))
.build();
Trigger houseKeepingTrigger = TriggerBuilder
.newTrigger()
.withIdentity("mfrJobHouseKeeping","group2")
.withSchedule(
CronScheduleBuilder.cronSchedule(cleanTrigerTime)
)
.build();
sch.start();
sch.scheduleJob(jobDetail, trigger);
sch.scheduleJob(jobDetail1, cleanTrigger);
I have overided the method execute()
of org.quartz.Job
我已经覆盖了
org.quartz.Job
execute()
方法
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
// TODO Auto-generated method stub
_log.info("--- This is in Execute method");
try{
Thread thread = new Thread(new FIRSTProcess("FIRST_THREAD"),"thread2");
thread.start();
thread.setName("FIRST_THREAD");
thread = null;
Thread.sleep(3000);
}catch(Exception e)
{
e.printStackTrace();
}
What my question is here One trigger triggers every day and content in execute()
method will execute, since I have only one method execute()
will get executed for two triggers. 我在这里的问题是,每天只有一个触发器触发,并且
execute()
方法中的内容将执行,因为我只有一个方法execute()
将针对两个触发器执行。
What I need is the content in execute
method should get executed only when my firstTrigger
triggers when my second trigger triggers I would like to do some other things instead of making duplicate work of firstTrigger
Can please explain how to segergate the two triggers work. 我需要的是内容的
execute
,只有当我应该得到执行的方法firstTrigger
当我第二次触发触发我想这样做,而不是做重复的工作,其他一些东西触发firstTrigger
能请解释如何segergate两个触发器工作。
Thanks in advance 提前致谢
As you want to do different work, I would suggest to create different implementations of the jobs (eg MFRSchedulerHouseKeeping.class). 当您要执行不同的工作时,我建议创建作业的不同实现(例如MFRSchedulerHouseKeeping.class)。 Then you can assign the triggers you want to the specific jobs.
然后,您可以将所需的触发器分配给特定作业。
Scheduler sch = new StdSchedulerFactory().getScheduler();
JobDetail jobDetail = JobBuilder.newJob(MFRScheduler.class)
.withIdentity("firstJob", "group1").build();
JobDetail jobDetail1 = JobBuilder.newJob(MFRSchedulerHouseKeeping.class)
.withIdentity("houseKeepingJob", "group2").build();
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("firstJob", "group1")
.withSchedule(
CronScheduleBuilder.cronSchedule(schduledTime))
.build();
Trigger houseKeepingTrigger = TriggerBuilder
.newTrigger()
.withIdentity("mfrJobHouseKeeping","group2")
.withSchedule(
CronScheduleBuilder.cronSchedule(cleanTrigerTime)
)
.build();
sch.start();
sch.scheduleJob(jobDetail, trigger);
sch.scheduleJob(jobDetail1, cleanTrigger);
An alternative approach would be to query the Trigger from the JobExecutionContext
via getTrigger()
and do the appropriate work on behalf of the result. 一种替代方法是通过
getTrigger()
从JobExecutionContext
查询触发器,并代表结果进行适当的工作。
@Override
public void execute(JobExecutionContext context ) throws JobExecutionException {
final String triggerName = context.getTrigger().getKey().getName();
if (TRIGGER_NAME_1.equals(triggerName)) {
// do work ...
}
// other cases...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.