Java 如何将两个触发器处理到同一个quartz调度程序

Java 如何将两个触发器处理到同一个quartz调度程序,java,triggers,quartz-scheduler,Java,Triggers,Quartz Scheduler,我有一个quartz调度程序,我为指定的时间(每天)创建了一个触发器。我还为另一个指定时间创建了另一个触发器(每三个月一次) 下面是我将两个触发器调度到单个调度器的代码 Scheduler sch = new StdSchedulerFactory().getScheduler(); JobDetail jobDetail = JobBuilder.newJob(MFRScheduler.class) .withIdentity("first

我有一个quartz调度程序,我为指定的时间(每天)创建了一个触发器。我还为另一个指定时间创建了另一个触发器(每三个月一次)

下面是我将两个触发器调度到单个调度器的代码

  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
请解释一下这两个触发器是如何工作的


提前感谢

因为您想做不同的工作,我建议创建不同的作业实现(例如mfrschedulerhouseceping.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...
}

由于您想做不同的工作,我建议您创建不同的作业实现(例如mfrschedulerhouseceping.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...
}

您使用哪个版本的quartz scheduler?您使用哪个版本的quartz scheduler?您使用哪个版本的quartz scheduler?我建议的第二个解决方案可以做到这一点。我添加了代码来清除它。尽管我会选择每种工作类型的解决方案。这是一种更干净、更直观的方法。我建议的第二种解决方案可以做到这一点。我添加了代码来清除它。尽管我会选择每种工作类型的解决方案。这是一种更干净、更直观的方法。我建议的第二种解决方案可以做到这一点。我添加了代码来清除它。尽管我会选择每种工作类型的解决方案。这是一种更干净、更直观的方法。