Добавить несколько триггеров для одного кварцевого задания - PullRequest
13 голосов
/ 07 июня 2011

Я хочу динамически добавлять триггеры в работу, но не могу найти никаких полезных методов из Планировщика.

Я хотя бы просто мог вызывать метод scheduleJob многократно, но это дает мнеИсключение ObjectAlreadyExists «потому что уже существует этот идентификатор».

Как я могу это сделать?

РЕДАКТИРОВАТЬ

private boolean scheduleLoadJob( XfuScheduleTimeInfo time )
{
    LoadScheduleJob job = new LoadScheduleJob( time );
    JobDetail detail;

    Integer id = Integer.valueOf( time.getScheduleId() );
    if( _hashMap.containsKey( id ) )
    {
        detail = _hashMap.get( Integer.valueOf( time.getScheduleId() ) );
    }
    else
    {
        detail = job.getDetail();
        _hashMap.put( id, detail );
    }

    try
    {
        Trigger newTrigger = job.getTrigger();
        _log.debug( "------" + newTrigger.getKey() );
        _quartzScheduler.scheduleJob( detail, newTrigger );
        return true;
    }
    catch( ParseException e )
    {
        _log.error( "Unable to parse cron expression for " + job.getInfo() );
        return false;
    }
    catch( SchedulerException e )
    {
        _log.error( "Job scheduling failed for " + job.getInfo() );
        return false;
    }
}

СКонсольный вывод

------ LoadJobs.Trigger-44

пакетное получение 1 триггеров

Создание экземпляра задания 'LoadJobs.Job-42', class = com.scheduling.LoadScheduleJob

Вызов выполнения для задания LoadJobs.Job-42

пакетное получение 1 триггеров

Задание вызвано для: 42: 44

------ LoadJobs.Trigger-45

Не удалось запланировать задание для 42: 45 - 1/5 * *?* *

Ответы [ 3 ]

10 голосов
/ 07 июня 2011

Этот пост дает подсказку, но вывод (schedulerInstance.add (триггер)) недействителен с Quartz 2.01.

Вместо этого используйте следующее после передачи задания триггеру (один из способов - использование метода forJob в TriggerBuilder)

 schedulerInstance.scheduleJob( newTrigger )
5 голосов
/ 29 мая 2014
    CronTrigger trigger=null;
    CronTrigger trigger1=null;
    CronTrigger trigger2=null;

    JobDetail job = new JobDetail();
    job.setName("dummyJobName");
    job.setJobClass(ExampleJob.class);

    trigger = new CronTrigger();
    trigger.setName("AppTrigger");
    trigger.setGroup(job.getGroup());
    trigger.setJobName(job.getName());
    trigger.setJobGroup(job.getGroup());
    trigger.setCronExpression("*/2 * * * * ?");

    trigger1 = new CronTrigger();
    trigger1.setName("AppTrigger1");
    trigger1.setGroup(job.getGroup());
    trigger1.setJobName(job.getName());
    trigger1.setJobGroup(job.getGroup());
    trigger1.setCronExpression("*/2 * * * * ?");

    trigger2 = new CronTrigger();
    trigger2.setName("AppTrigger2");
    trigger2.setGroup(job.getGroup());
    trigger2.setJobName(job.getName());
    trigger2.setJobGroup(job.getGroup());
    trigger2.setCronExpression("*/2 * * * * ?");

    Scheduler scheduler = new StdSchedulerFactory().getScheduler();

    scheduler.start();
    scheduler.addJob(job, true);
    scheduler.scheduleJob(trigger);
    scheduler.scheduleJob(trigger1);
    scheduler.scheduleJob(trigger2);
1 голос
/ 07 июня 2011

Вы можете вызывать scheduleJob повторно.Просто убедитесь, что вы даете каждому триггеру уникальное имя / группу.

См. TriggerBuilder.withIdentity: http://www.quartz -scheduler.org / docs / api / 2.0.0 / index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...