2009-04-30 17 views
7

Estoy buscando una forma efectiva de ejecutar un método todos los días a las 3 p.m. independientemente de cuándo se ejecutó inicialmente la aplicación o durante cuánto tiempo se ha estado ejecutando.Java - Programando una tarea diaria

Esto debe hacerse en su totalidad de la aplicación sin intervención del sistema operativo (ex programador de tareas de Windows.)

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

Cualquier ayuda sería apreciada.

Gracias.

+1

¿Qué tipo de dificultad tiene? Sería sencillo hacer que un temporizador se active periódicamente y verificar la hora del día y ver la tabla de "cron" de la aplicación para ver si se debe hacer algo. ¿No? – jottos

Respuesta

16

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

+0

Definitivamente use Quartz. Es mi programador favorito. Funciona como un encanto – Maksim

+0

Siempre me he preguntado. Necesitas una aplicación en ejecución para ejecutar Quartz en primer lugar, ¿verdad? ¿Es posible ejecutarlo cuando no se ha iniciado ninguna aplicación? ¿Cómo se puede ejecutar una aplicación Java en segundo plano? (¿Tal vez se ejecuta dentro de un TrayIcon o algo así?) – OscarRyz

+0

Sí, debe haber una aplicación Java ejecutándose que incluya Quartz. Eche un vistazo a http: // stackoverflow.com/questions/326509/java-background-daemon-service-cross-platform-best-prratices para ejecutar aplicaciones Java en segundo plano. – Mark

1

Puede iniciar un hilo que calcule la diferencia a las 15:00 y duerma durante ese tiempo. Cuando se despierta, ejecuta el método y vuelve a calcular y duerme. ¿Es esto lo que querías decir?

2

es probable que desee usar algo como el quartz engine que puede hacer cosas como ejecutar tareas que no cumplieron (como durante una ejem accidente ) y se toma el trabajo de tratar de manejar los hilos.

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

2

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

  • horaActual - desiredTime

entonces se puede usar algo como a schedule executor a presentar las tareas, y ejecutarlos con un retraso en particular. Esto es mucho más simple que las opciones que tiene con marcos como Quartz, pero no requiere una dependencia externa.

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

1

Jcrontab

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