2009-04-30 12 views
7

Sto cercando un modo efficace per eseguire un metodo ogni giorno alle 3:00 indipendentemente dal momento in cui l'applicazione è stata inizialmente eseguita o per quanto tempo è stata in esecuzione.Java - Pianificazione di un'attività giornaliera

questo deve essere fatto interamente con l'applicazione senza alcun intervento operativo (es. Windows Task Scheduler)

ho avuto modo di sperimentare con java.util.Timer in varia configurazioni, ma non ho avuto successo.

Qualsiasi aiuto sarebbe apprezzato.

Grazie.

+1

Che tipo di difficoltà stai avendo? Dovrebbe essere semplice far scattare periodicamente un timer e controllare l'ora del giorno e controllare la tabella "cron" dell'applicazione per vedere se è necessario fare qualcosa. No? – jottos

risposta

16

Si dovrebbe dare un'occhiata a Quartz che è un sistema di pianificazione dei lavori basato su Java.

+0

Utilizzare decisamente Quarzo. È il mio programmatore preferito. Funziona come un fascino – Maksim

+0

Mi sono sempre chiesto. Hai bisogno di un'applicazione in esecuzione per eseguire Quartz in primo luogo, giusto? È possibile eseguirlo quando nessuna applicazione è stata avviata? Come può un'applicazione java eseguire in background? (magari in esecuzione in un TrayIcon o qualcosa del genere?) – OscarRyz

+0

Sì, deve esserci un'applicazione Java in esecuzione che include Quartz. Dai un'occhiata a http: // StackOverflow.it/questions/326509/java-background-daemon-service-cross-platform-best-pratices per l'esecuzione di applicazioni Java in background. – Mark

1

È possibile avviare un thread che calcola la differenza per le successive 3pm e dorme per quel momento. Al suo risveglio esegue il metodo e ricalcola e dorme. È questo che intendevi?

2

probabilmente si desidera usare qualcosa come il quartz engine che può fare cose come eseguire compiti che perdere (come nel corso di una ahem incidente ) e ci vuole la prestazione di lavoro di cercare di gestire le discussioni.

Ad esempio, se si utilizzano i thread e lo si mette in stop e lo si riattiva 86400 secondi (un giorno) in seguito, si sveglierà e con un'ora di ritardo (giorno = 82800 secondi) o anticipato (giorno = 90000 secondi) in modifica ora legale nel corso del giorno, in modo da stare attenti con qualsiasi soluzione che si sceglie

2

Un modo JDK integrato è quello di fare ciò che altri hanno suggerito e prima calcolare:

  • currentTime - desiredTime

Quindi è possibile utilizzare qualcosa come a schedule executor di presentare i compiti, e farli funzionare con un particolare ritardo. Questo è molto più semplice delle opzioni che hai con framework come Quartz, ma non richiede una dipendenza esterna.

Inoltre, si dovrebbe sempre elencare quale JDK si sta utilizzando, in modo che le persone possano fornire soluzioni per la propria versione del JDK.

1

Jcrontab

Jcrontab è un programmatore scritto in Java. L'obiettivo del progetto è fornire una pianificazione completamente funzionale per i progetti Java.