usar tutorial quartz example como java dynamic quartz-scheduler repetition

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);