Tengo algunas tareas que se ejecutan con la ayuda de Java Quartz Jobs, pero tengo que 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?¿Cómo se interrumpe o se detiene la ejecución actual del trabajo de cuarzo?
Respuesta
Necesita escribir su trabajo como una implementación de InterruptableJob. Para interrumpir este trabajo, es necesario manejar a Scheduler, y llamar a interrupt(jobKey<<job name & job group>>)
Por favor, tienen una mirada @ Javadoc para las clases anteriores, también cuarzo de distribución contiene un ejemplo para esto (Ejemplo 7).
En Cuarzo 2.1 con la primavera se puede:
@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());
}
}
La mejor solución en mi opinión es el que se describe en este tema: http://forums.terracotta.org/forums/posts/list/7700.page
yo sólo he introducido un "sueño" después de la parada conjunto marcar a verdadero para permitir que el trabajo termine 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 esto no estaba disponible en el momento en que se realizó 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();
uso de una bandera o algo para saber cuándo hay que parar la tarea no se ejecute. A continuación, utilice
scheduler.shutdown();
Cómo he implementado mis requisitos:
if(flag==true)
{
scheduler.start();
scheduler.scheduleJob(jobDetail, simpleTrigger);
}
else if(flag==false)
{
scheduler.shutdown();
}
Dónde jobDetail y simpleTrigger son explica por sí mismo.
Espero que ayude. :)
Esta solución está cerrando todo el planificador, lo que no es realmente correcto a menos que tenga un trabajo asignado al planificador. Debería tener una forma de eliminar solo el trabajo específico, no el planificador completo, ya que es posible tener más de un trabajo ejecutándose en el mismo planificador. – Salman
- 1. Programador de cuarzo que no se detiene después del cierre
- 2. ¿Cómo se detiene la ejecución de Grails en Intellij?
- 3. ¿El navegador stop/crash detiene la ejecución del script?
- 4. se interrumpe el código de la podredumbre
- 5. ¿Cuándo se interrumpe Java Strings?
- 6. HTML.fromHtml La línea se interrumpe al desaparecer
- 7. cuando se dispara un trabajo de cuarzo, ¿es una nueva instancia de clase de trabajo?
- 8. Ejecutando un trabajo de cuarzo perdido
- 9. programador de cuarzo: se ejecuta el último día del mes
- 10. ¿Cómo se interrumpe JS en el navegador?
- 11. ¿Cómo se detiene la enumeración rápida?
- 12. ¿Cómo se interrumpe un comando Vim que toma demasiado tiempo?
- 13. ¿Se detiene la ejecución de javascript cuando se encuentra una línea no válida?
- 14. La ejecución de dos puestos de trabajo con cuarzo en Java
- 15. El trabajo de cuarzo se ejecuta dos veces cuando se implementa en tomcat 6/Ubuntu 10.04LTS
- 16. ApplicationInstance.CompleteRequest no detiene la ejecución del código debajo de él?
- 17. ¿El cambio de window.location detiene la ejecución de javascript?
- 18. servicio de Android se detiene
- 19. ¿Cómo prevenir la ejecución concurrente de un trabajo en Grails?
- 20. Inyección en mi trabajo de cuarzo
- 21. ¿Cómo se detiene la ejecución de MSBuild sin generar un error?
- 22. ¿La ejecución de PHP se detiene después de que un usuario abandona la página?
- 23. jQuery Confirme el cuadro que detiene la ejecución del script
- 24. MPMoviePlayerController detiene la reproducción del iPod y no se reinicia
- 25. Tener cuarzo ejecutar un trabajo solo en un hilo cuando hay varios hilos de cuarzo
- 26. NSTimer no se detiene
- 27. MSVC6: Punto de interrupción se detiene programa
- 28. ¿Cómo se muestra la ruta del módulo python en ejecución actual?
- 29. MediaPlayer se detiene y reinicia
- 30. cuarzo: prevención de instancias simultáneas de un trabajo en jobs.xml
Thx))))))))))) – user253202
La limitación de este enfoque es ** no ** consciente del clúster. Java doc: * Este método no es compatible con clústeres. Es decir, solo interrumpirá instancias de InterruptableJob identificado que se estén ejecutando actualmente en esta instancia de Scheduler, no en todo el clúster. * –