[英]how handle two triggers to same quartz 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);
我已經覆蓋了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();
}
我在這里的問題是,每天只有一個觸發器觸發,並且execute()
方法中的內容將執行,因為我只有一個方法execute()
將針對兩個觸發器執行。
我需要的是內容的execute
,只有當我應該得到執行的方法firstTrigger
當我第二次觸發觸發我想這樣做,而不是做重復的工作,其他一些東西觸發firstTrigger
能請解釋如何segergate兩個觸發器工作。
提前致謝
當您要執行不同的工作時,我建議創建作業的不同實現(例如MFRSchedulerHouseKeeping.class)。 然后,您可以將所需的觸發器分配給特定作業。
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);
一種替代方法是通過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.