la funzione di chiamata periodicamente in Java
Domanda
dobbiamo eseguire una funzione periodica in applicazioni Web Java. Come chiamare la funzione di una classe periodicamente? C'è un modo che chiamano funzione quando un certo evento si è verificato, come alto carico di server e così via. che cosa è crontab? È che il lavoro periodicamente?
Soluzione
Per chiamare qualcosa periodicamente, vedi TimerTask
Altri suggerimenti
Se avete bisogno di qualcosa di più robusto è possibile utilizzare quarzo
Per quanto riguarda crontab
è lo strumento di pianificazione su macchine Unix.
Per chiamare i metodi quando il server è alto carico, di avere almeno due possibili approcci. Il tuo application server potrebbe avere ganci di gestione che si permettesse di monitorare il comportamento e agire progrommatic. Alterntaively hai qualche capacità di monitoraggio del sistema (es. Tivoli o OpenView) e genera "eventi", non dovrebbe essere troppo difficile per fornire tali eventi come (per esempio) i messaggi JMS e avere il vostro server di raccoglierli.
Tuttavia, si potrebbe desiderare di spiegare un po 'di più su ciò che si vuole raggiungere. Adaptive beahviour applicazione potrebbe essere molto difficile da ottenere.
Se si desidera eseguire qualcosa periodicamente, non farlo nel server web. Questo sarebbe un approccio molto sbagliato IMO. E 'meglio usare cron
, invece, se siete su un sistema operativo Unix-like. server Windows offrono funzionalità simili.
dobbiamo eseguire periodicamente una funzione in applicazioni Web Java
(1) Quindi, guardare nel tuo descrittore di deployment (web.xml) definire un listener per l'avvio in fase di avvio.
Come chiamare la funzione di una classe periodicamente?
(2) Creare una Timer nell'ascoltatore.
C'è un modo che chiamata di funzione quando qualche evento verificato come carico elevato server e così via
(3) ed eseguire alcuni fili per verificare le condizioni di sistema che sono accessibili con Java, anche progs sistema gestito (uptime, ecc) e analizzare l'output.
crontab potrebbe essere un modo, ma l'esecuzione di Java inizierà un'altra JVM e che è davvero la cosa calda in contenitori di servlet:. Tutte le corse nella stessa JVM
Non dimenticare java.util.concurrent - ha un sacco di classi per la programmazione, ad esempio, ScheduledThreadPoolExecutor, se avete bisogno di più di un semplice timer.
http: / /java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html
C'è anche un backport di esso per Java 1.4: http://backport-jsr166.sourceforge.net .
Se si utilizza già primavera, si potrebbe desiderare di avere uno sguardo al quadro di esecuzione dell'attività di primavera - con @Scheduled e @Async di annotare i metodi come compiti e l'attuazione della funzionalità in un processore che delega il lavoro effettivo ad un lavoratore, come descritto in:
Il vantaggio è che è possibile definire i timer utilizzando una sintassi simile a cron nel vostro contesto primavera e non è necessario niente di speciale per impostare le attività, è anche ben integrato in applicazioni Java EE e dovrebbe giocare bene con i server web (che le discussioni personalizzati tendono a non fare sempre).
Come chiamare la funzione di una classe periodicamente?
Ci sono diverse soluzioni: una Timer , un'implementazione di cron Java come cron4j , quarzo , o anche il EJB Timer API . Scegliere uno o l'altro altamente dipende dal contesto: il tipo di applicazione, le tecnologie utilizzate, il numero di posti di lavoro, ecc
.C'è un modo che chiamata di funzione quando qualche evento si è verificato, come alto carico di server e così via
Si potrebbe forse usare JMX nei processi di accedere e monitorare le informazioni e attivare un'azione sotto una condizione specifica. Ma questo è più di una modalità di trazione, non evento in base.