Domanda

Qual è il modo migliore / più semplice per eseguire attività periodiche (come un thread demone) su un server tomcat / jetty? Come inizio il thread? Esiste un meccanismo semplice o è una cattiva idea?

È stato utile?

Soluzione

Va ??bene ed efficace riporre un'istanza java.util.Timer (o meglio ancora ScheduledExecutor) in ServeletContext. Crealo in una chiamata init () di un Servlet e tutti i tuoi servlet possono aggiungere TimerTask ad esso.

Altri suggerimenti

Se vuoi mantenere tutto sul lato Java, dai un'occhiata a Quartz .
Gestisce il failover e la ripartizione fine dei lavori, con la stessa flessibilità dei lavori cron.

Un modo generico che funziona per molti sistemi è semplicemente quello di avere un cron job che esegue una puntata periodica contro la tua app.

Non riesco a rispondere alle cose tomcat / jetty, ma ho fatto cose simili con le app Web basate su Python.

Di solito eseguo solo un'app separata che svolge le attività periodiche necessarie. Se è necessaria l'interoperabilità tra il sito Web e l'app, tale comunicazione può avvenire tramite una sorta di API (utilizzando qualcosa come XML-RPC / unix socket / ecc.) O anche solo attraverso il livello del database, se adeguato.

Spero che sia d'aiuto.

Se si desidera utilizzare un processo cron ma non si dispone dell'accesso amministrativo al sistema di sviluppo, è possibile eseguire un crontab utente eseguendo il comando:

crontab -e

Utilizza vi di default sulla maggior parte dei sistemi, ma puoi cambiarlo nell'editor di tua scelta tramite:

export EDITOR=/usr/local/bin/my_editor

Quindi, eseguendo il comando crontab -e avvierai il tuo file crontab nel tuo editor. Al momento del salvataggio, le modifiche verranno ripristinate nel cron del sistema.

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