quartz example java scheduled-tasks quartz-scheduler schedule

java - example - quartz scheduler documentation



¿Cómo interrumpir o detener el trabajo de cuarzo actualmente en ejecución? (4)

En Quartz 2.1 con Spring puedes:

@Autowired private Scheduler schedulerFactoryBean; //injected by spring ... ... List<JobExecutionContext> currentlyExecuting = schedulerFactoryBean.getCurrentlyExecutingJobs(); //verifying if job is running for (JobExecutionContext jobExecutionContext : currentlyExecuting) { if(jobExecutionContext.getJobDetail().getKey().getName().equals("JobKeyNameToInterrupt")){ result = schedulerFactoryBean.interrupt(jobExecutionContext.getJobDetail().getKey()); } }

Tengo algunas tareas que se ejecutan con la ayuda de Java Quartz Jobs, pero necesito detener algunas tareas por alguna condición en mi código. Leí que esto se puede hacer a través de InterruptableJob. Pero no entendí de qué manera debería hacerlo.


La mejor solución en mi opinión es la que se describe en este hilo: http://forums.terracotta.org/forums/posts/list/7700.page

Acabo de introducir un "reposo" después de establecer el indicador de parada en verdadero para permitir que el trabajo finalice limpiamente.

@Override public void interrupt() throws UnableToInterruptJobException { stopFlag.set(true); try { Thread.sleep(30000); } catch (InterruptedException e) { //logger.error("interrupt()", e); } Thread thread = runningThread.getAndSet(null); if (thread != null) thread.interrupt(); }


No sé por qué nadie mencionó esto, o tal vez no estaba disponible en el momento en que se hizo la pregunta.

Hay un método llamado shutdown para una instancia de Scheduler.

SchedulerFactory factory = new StdSchedulerFactor(); Scheduler scheduler = factory.getScheduler();

Lo anterior se utiliza para iniciar un trabajo como

scheduler.start();

Use una bandera o algo para saber cuándo detener la ejecución del trabajo. Entonces use

scheduler.shutdown();

Cómo implementé mi requerimiento:

if(flag==true) { scheduler.start(); scheduler.scheduleJob(jobDetail, simpleTrigger); } else if(flag==false) { scheduler.shutdown(); }

Donde jobDetail y simple Trigger son auto explicativos.

Espero eso ayude. :)


Necesita escribir su trabajo como una implementación de InterruptableJob . Para interrumpir este trabajo, necesita manejar el Scheduler y la interrupt(jobKey<<job name & job group>>) llamada interrupt(jobKey<<job name & job group>>)

Por favor, eche un vistazo a javadoc para las clases anteriores, también la distribución de cuarzo contiene un ejemplo para esto (ejemplo7).