簡體   English   中英

如何處理同一石英調度程序的兩個觸發器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM