Necesito hacer una operación periódica (llamar a un método java) en mi aplicación web (jsp en tomcat). ¿Cómo puedo hacer esto? Java daemon u otras soluciones?Cómo puedo hacer un Java Daemon
Respuesta
Puede usar ScheduledExecutorService
para la ejecución periódica de una tarea. Sin embargo, si necesita una programación cron más compleja, eche un vistazo al Quartz. En particular, recomendaría usar Quartz in conjunction with Spring si sigue esta ruta, ya que proporciona una API más agradable y le permite controlar la activación de su trabajo en la configuración.
ScheduledExecutorService Ejemplo (tomado de Javadoc)
import static java.util.concurrent.TimeUnit.*;
class BeeperControl {
private final ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
public void beepForAnHour() {
final Runnable beeper = new Runnable() {
public void run() { System.out.println("beep"); }
};
final ScheduledFuture<?> beeperHandle =
scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
scheduler.schedule(new Runnable() {
public void run() { beeperHandle.cancel(true); }
}, 60 * 60, SECONDS);
}
}
Mi operación no tiene un tiempo de finalización . Necesito hacer esto, por ejemplo, todas las semanas. ¿Cómo puedo hacer esto? – enfix
Si está usando ScheduledExecutorService, necesita usar scheduleWithFixedDelay o scheduleAtFixedRate. Para las tareas que se ejecutan una vez por semana o en ciertos momentos del mes, tiendo a favorecer a Quartz, ya que puede proporcionar una expresión cron simple en config que describa las horas exactas en que se debe ejecutar el trabajo. – Adamski
Adams respuesta es justo en el dinero. Si terminas rodando el tuyo (en lugar de ir por la ruta del cuarzo), querrás dar el puntapié inicial en un ServletContextListener. Aquí hay un ejemplo, usando java.util.Timer, que es más o menos una versión tonta de ScheduledExexutorPool.
public class TimerTaskServletContextListener implements ServletContextListener
{
private Timer timer;
public void contextDestroyed(ServletContextEvent sce)
{
if (timer != null) {
timer.cancel();
}
}
public void contextInitialized(ServletContextEvent sce)
{
Timer timer = new Timer();
TimerTask myTask = new TimerTask() {
@Override
public void run()
{
System.out.println("I'm doing awesome stuff right now.");
}
};
long delay = 0;
long period = 10 * 1000; // 10 seconds;
timer.schedule(myTask, delay, period);
}
}
Y entonces esto va en su web.xml
<listener>
<listener-class>com.TimerTaskServletContextListener</listener-class>
</listener>
Sólo más alimento para el pensamiento!
- 1. ¿Cómo puedo hacer un JAR desde .java
- 2. Cómo codigo un Mono Daemon
- 3. Cómo convertir un programa de Java a daemon con jsvc?
- 4. Ejecutor y Daemon en Java
- 5. Infraestructura de despliegue Java daemon
- 6. Java daemon en Linux: ¿Opciones?
- 7. Cómo hacer que uwsgi --emperor se ejecute como daemon
- 8. start-stop-daemon y el programa java
- 9. ¿Cómo creo hilos de daemon?
- 10. ¿Cómo configurar un daemon de PHP?
- 11. ¿Cómo puedo hacer un exe en NetBeans?
- 12. Creando un Ubuntu Daemon personalizado
- 13. ¿Cómo puedo hacer un ejecutable portátil?
- 14. ¿Es aconsejable usar PHP para un daemon?
- 15. Iniciar un daemon desde PHP
- 16. ¿Hace un programa de Ruby un daemon?
- 17. Ejecutando SBT como Daemon
- 18. Linux: ¿Cómo hacer que un daemon/servicio se pueda usar con xinetd?
- 19. Detener Erlang Daemon
- 20. Efficient Python Daemon
- 21. ¿Cómo termina JVM los hilos daemon? o Cómo escribir hilos daemon que terminan correctamente
- 22. Android daemon process
- 23. ¿Cómo hacer un JFrame desplazable en Java?
- 24. ¿Cómo iniciar un programa Go como daemon en Ubuntu?
- 25. ¿Cómo puedo hacer que una aplicación Java se actualice automáticamente?
- 26. ¿Cómo puedo hacer la decodificación LZW en Java?
- 27. ¿Cómo puedo hacer este modelo genérico de java?
- 28. Ejecutar la aplicación de la consola Java como daemon (fondo)
- 29. ¿Cómo puedo hacer pantalla completa en Java en OSX
- 30. Cómo iniciar y detener un daemon de shell desde Ruby
publicación similar http://stackoverflow.com/questions/3053936/how-to-execute-task-for-a-specific-period-in-java/3053971#3053971 –