java - tutorial - Agregar mĂșltiples activadores a un solo trabajo de cuarzo
quartz scheduler documentation (3)
Puede llamar scheduleJob repetidamente. Solo asegúrate de darle a cada Trigger un nombre / grupo único.
Ver TriggerBuilder.withIdentity: http://www.quartz-scheduler.org/docs/api/2.0.0/index.html
Quiero agregar activadores dinámicamente a un trabajo, pero no puedo encontrar ningún método útil fuera de Scheduler
Pensé que solo podría llamar el método scheduleJob de forma repetitiva, pero esto me da la excepción ObjectAlreadyExists "porque ya existe uno con esta identificación".
¿Cómo puedo hacer esto?
EDITAR
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;
}
}
Con salida de consola
------ LoadJobs.Trigger-44
adquisición por lotes de 1 disparador
Ejemplo de producción de Job ''LoadJobs.Job-42'', class = com.scheduling.LoadScheduleJob
Llamar ejecutar en el trabajo LoadJobs.Job-42
adquisición por lotes de 1 disparador
Job pidió: 42: 44
------ LoadJobs.Trigger-45
La programación de trabajos falló para 42: 45 - 1/5 * *? * *
Esta publicación da una pista, pero la conclusión (schedulerInstance.add (trigger)) no es válida desde Quartz 2.01.
En su lugar, use lo siguiente, después de asignar el trabajo al disparador (una forma es usar el método ForJob de 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);