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?

È stato utile?

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:

http: // blog .springsource.com / 2010/01/05 / task-pianificazione-semplificazioni-in-primavera-3-0 /

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top