Ho bisogno di eseguire un'operazione periodica (chiama un metodo java) nella mia app web (jsp su tomcat). Come posso fare questo? Demone Java o altre soluzioni?Come posso creare un Demone Java
risposta
È possibile utilizzare un ScheduledExecutorService
per l'esecuzione periodica di un'attività. Tuttavia, se hai bisogno di una programmazione più complessa come cron, dai uno sguardo allo Quartz. In particolare, consiglierei di usare Quartz in conjunction with Spring se segui questa strada, poiché fornisce un'API più carina e ti consente di controllare il licenziamento del lavoro nella configurazione.
ScheduledExecutorService Esempio (tratto da Javadoc)
import static java.util.concurrent.TimeUnit.*;
class BeeperControl {
private final ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
public void beepForAnHour() {
final Runnable beeper = new Runnable() {
public void run() { System.out.println("beep"); }
};
final ScheduledFuture<?> beeperHandle =
scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
scheduler.schedule(new Runnable() {
public void run() { beeperHandle.cancel(true); }
}, 60 * 60, SECONDS);
}
}
Le mie operazioni non hanno un'ora di fine . Ho bisogno di farlo, per esempio, ogni settimana. Come posso fare questo? – enfix
Se si utilizza ScheduledExecutorService è necessario utilizzare scheduleWithFixedDelay o scheduleAtFixedRate. Per le attività in esecuzione una volta alla settimana o in determinati periodi del mese tendo a preferire il quarzo, in quanto è possibile fornire un'espressione cron semplice nella configurazione che descrive le esatte volte in cui il lavoro deve essere eseguito. – Adamski
Adams risposta è proprio sul prezzo. Se finisci col rotolare per conto tuo (piuttosto che seguire la rotta del quarzo), ti consigliamo di dare il via a qualcosa in un ServletContextListener. Ecco un esempio, utilizzando java.util.Timer, che è più o meno una versione stupida di ScheduledExexutorPool.
public class TimerTaskServletContextListener implements ServletContextListener
{
private Timer timer;
public void contextDestroyed(ServletContextEvent sce)
{
if (timer != null) {
timer.cancel();
}
}
public void contextInitialized(ServletContextEvent sce)
{
Timer timer = new Timer();
TimerTask myTask = new TimerTask() {
@Override
public void run()
{
System.out.println("I'm doing awesome stuff right now.");
}
};
long delay = 0;
long period = 10 * 1000; // 10 seconds;
timer.schedule(myTask, delay, period);
}
}
E poi questo va nel vostro web.xml
<listener>
<listener-class>com.TimerTaskServletContextListener</listener-class>
</listener>
Solo più cibo per la mente!
- 1. Come creare un processo demone in Golang?
- 2. Convertire un ExecutorService al demone in Java
- 3. Come posso creare un programma Java eseguibile?
- 4. Demone Java sotto Linux: Scelte?
- 5. Come posso gestire un demone basato su Python su Linux?
- 6. Come posso creare un file PFX da un Keystore Java?
- 7. cos'è un demone adb?
- 8. È saggio usare PHP per un demone?
- 9. Come posso creare un array di liste collegate in java?
- 10. Come posso creare emacsclient basta aprire una finestra per un demone emacs esistente senza aprire un nuovo file
- 11. Come posso creare un exe in NetBeans?
- 12. Esegui script bash come demone
- 13. Come avviare phoenix.server come demone
- 14. Come posso creare un shelltoast?
- 15. Come posso creare un eseguibile portatile?
- 16. Crea un demone un programma Ruby?
- 17. Demone Monit - errore di connessione al demone Monit
- 18. Demone di Apache Commons "Errore nella creazione di Java"
- 19. Come creare un ArrayList 2D in java?
- 20. Come creare un JAR da .java
- 21. Posso creare interfacce tipo Java in Perl?
- 22. Distribuzione di CherryPy (demone)
- 23. Come posso eseguire uno script Perl come un demone di sistema in linux?
- 24. Esegui l'applicazione Qt all'avvio come demone Linux
- 25. Cosa posso usare per creare un client REST in Java?
- 26. Posso creare un metodo con accesso protetto Java in Scala?
- 27. Come posso inviare un SMS da Java?
- 28. Come avviare un programma Go come demone in Ubuntu?
- 29. Eseguire Sidekiq come demone su Ubuntu
- 30. Come si configura un demone con python-daemon?
post simile http://stackoverflow.com/questions/3053936/how-to-execute-task-for-a-specific-period-in-java/3053971#3053971 –