Добавление нескольких триггеров в одно задание quartz
Я хочу динамически добавлять триггеры в задание, но не могу найти никаких полезных методов от Scheduler
Я, хотя я бы просто мог назвать метод 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.Триггер-44
пакетное приобретение 1 триггеры
создание экземпляра задания ' LoadJobs.Работа-42', класс=com.планирование.LoadScheduleJob
вызов execute на LoadJobs задания.Работа-42
пакетное приобретение 1 триггеры
вызов Иова: 42: 44
------ LoadJobs.Триггер-45
сбой планирования заданий для 42 : 45 - 1/5 * * ? * *
3 ответов
этот пост дает подсказку, но вывод (schedulerInstance.добавить (триггер)) недопустимо с версии Quartz 2.01.
вместо этого используйте следующее, после ассингинга задания на триггер (один из способов-использование метода Forjob TriggerBuilder )
schedulerInstance.scheduleJob( newTrigger )
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);
вы можете вызвать scheduleJob несколько раз. Просто убедитесь, что вы даете каждому триггеру уникальное имя/группу.
См. TriggerBuilder.withIdentity:http://www.quartz-scheduler.org/docs/api/2.0.0/index.html