Pregunta

Estoy buscando una forma efectiva de ejecutar un método todos los días a las 3PM, independientemente de cuándo se ejecutó inicialmente la aplicación o cuánto tiempo ha estado ejecutándose.

Esto debe hacerse completamente desde la aplicación sin intervención del sistema operativo (ej. Programador de tareas de Windows)

He estado experimentando con java.util.Timer en varias configuraciones, pero no he tenido éxito.

Cualquier ayuda sería apreciada.

Gracias.

¿Fue útil?

Solución

Debería echar un vistazo a Quartz , que es un sistema de programación de trabajos basado en Java.

Otros consejos

Probablemente quiera usar algo como el motor de cuarzo puede hacer cosas como ejecutar tareas que se perdió (como durante un bloqueo de ahem ) y le quita el trabajo de tratar de administrar hilos.

Por ejemplo, si usa hilos y lo pone a dormir y lo despierta 86400 segundos (un día) más tarde, se despertará y una hora tarde (día = 82800 segundos) o temprano (día = 90000 segundos) en el cambio de horario de verano día, así que ten cuidado con la solución que elijas

Una forma JDK incorporada es hacer lo que otros sugieren y primero calcular:

  • currentTime - deseadoTime

Luego puedes usar algo como a programar ejecutor para enviar las tareas y ejecutarlas con un retraso particular. Esto es mucho más simple que las opciones que tiene con frameworks como Quartz , pero no requiere un externo dependencia.

Además, siempre debe enumerar qué JDK está utilizando, para que las personas puedan proporcionar soluciones para su versión de JDK.

Puede comenzar un hilo que calcule la diferencia hasta las 3pm siguientes y duerma durante ese tiempo. Cuando se despierta, ejecuta el método, recalcula y duerme. ¿Es esto lo que querías decir?

Como dicen otros Quartz es una opción, con ella puede realizar operaciones, trabajos o activadores de tipo cron, aquí hay un enlace sobre este tema: http://www.ibm.com/developerworks/java/library/j-quartz/index.html

Jcrontab

  

Jcrontab es un planificador escrito en Java. El objetivo del proyecto es proporcionar una programación completamente funcional para proyectos Java.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top