Tengo una aplicación web que se sincroniza con una base de datos central cuatro veces por hora. El proceso generalmente toma 2 minutos. Me gustaría ejecutar este proceso como un hilo en X: 55, X: 10, X: 25 y X: 40 para que los usuarios lo sepan en X: 00, X: 15, X: 30 y X: 45 tienen una copia limpia de la base de datos. Solo se trata de gestionar las expectativas. He pasado por el ejecutor en java.util.concurrent
pero la programación se hace con el scheduleAtFixedRate
que, en mi opinión, no proporciona ninguna garantía sobre cuándo se ejecuta realmente en términos de horas. Podría usar un primer retraso para iniciar el Runnable
de manera que el primero esté cerca del tiempo de inicio y el programa por cada 15 minutos, pero parece que esto probablemente divergerá en el tiempo. ¿Hay alguna manera más fácil de programar el hilo para que se ejecute 5 minutos antes de cada cuarto de hora?Ejecutar hilo de Java en momentos específicos
Respuesta
Puede dejar que Runnable programe su "próxima ejecución".
Tales como,
class Task implements Runnable {
private final ScheduledExecutorService service;
public Task(ScheduledExecutorService service){
this.service = service;
}
public void run(){
try{
//do stuff
}finally{
//Prevent this task from stalling due to RuntimeExceptions.
long untilNextInvocation = //calculate how many ms to next launch
service.schedule(new Task(service),untilNextInvocation,TimeUnit.MILLISECONDS);
}
}
}
TimerTask
se encarga de este caso.
Si no quieren tener que mantener la programación de los puestos de trabajo, es posible que desee ver en una herramienta de planificación de tareas como Quartz.
Quartz sería una buena opción ya que su aplicación se basa en la web. Proporcionará la programación basada en el tiempo precisa que necesita.
El cuarzo es una fuente con todas las funciones, abierta servicio de programación trabajo que puede ser integrado con, o usarse junto prácticamente cualquier EE Java o Java SE aplicación - desde la más pequeña aplicación independiente para el mayor sistema de comercio electrónico . Se puede usar Quartz para crear planificaciones simples o complejas para ejecutar decenas, cientos o incluso decenas de miles de trabajos; trabajos cuyas tareas se definen como componentes estándar de Java que pueden ejecutarse virtualmente cualquier cosa que usted pueda programar que hagan. El programador de Quartz incluye muchas características de clase empresarial , como JTA transacciones y clustering.
- 1. pandas, pitón - cómo seleccionar momentos específicos en series de tiempo
- 2. script PHP a ejecutar en determinados momentos
- 3. ¿Puedo ejecutar un hilo dentro de un hilo en java?
- 4. E-mailing automático de salida gráfica pdf en momentos específicos desde R
- 5. Uso de Java ProcessBuilder para ejecutar un comando Hilo
- 6. ejecutar una tarea a intervalos específicos en Python
- 7. Enlazado de hilos específicos a núcleos de procesador específicos
- 8. cómo ejecutar un hilo después de completar otro hilo
- 9. Ejecutar un control WPF en otro hilo
- 10. ¿Cómo ejecutar algo en el hilo STA?
- 11. Servicio de Windows: no funciona en los momentos especificados (Delphi)
- 12. Hilo estacionado de Java
- 13. cuente caracteres específicos en una cadena (Java)
- 14. Diferencia entre el hilo # ejecutar y el hilo # despertar?
- 15. ¿Cómo puedo matar un hilo de otro hilo en Java?
- 16. Detener un hilo en Java?
- 17. ejecutar código Java en Java
- 18. En algunos momentos, vim funciona notablemente lentamente
- 19. ¿Cómo llamar a un hilo para que se ejecute en una hora específica en Java?
- 20. Marco web liviano de Java: requisitos específicos
- 21. llamando al hilo principal desde el hilo Runnable en java
- 22. cómo escribir y ejecutar un hilo
- 23. Temporizador en el hilo de Java
- 24. ¿Cómo calculo los momentos de equinoccio/solsticio?
- 25. OpenCV C++ uso de cv :: Momentos
- 26. Ejecutar un bloque anónimo en un hilo de fondo específico
- 27. Ejecutar una GUI de Cocoa en un hilo no principal
- 28. Volcado de hilo Java: BLOQUEADO hilo sin "esperar para bloquear ..."
- 29. matando un hilo en ejecución en java?
- 30. Decorador Patrón con métodos específicos de decorador en Java
Dit de esta manera y está trabajando muy bien. Gracias. – rmarimon
@rmarimon: NP :) Solo tenga cuidado de que 'RuntimeException' pueda detener la ejecución periódica. Me quemé por esto, así que edité la respuesta en consecuencia. –
Lo acabo de cambiar. Lo tuve como try {} catch (Exception e) {} y luego reprogramé. Pero finalmente parece el enfoque correcto. – rmarimon