2011-06-22 1 views
3

J'ai une webapp fonctionnant sur weblogic qui exécute un Scheduler sur un ServletContextListener. Le problème est que le planificateur s'exécute indéfiniment, donc même si j'arrête la webapp ou redéploie le planificateur continue à fonctionner.Quartz sur un webapp - le planificateur ne s'arrête pas

Je devrais pouvoir arrêter le planificateur sur contextDestroyed, mais je n'ai pas l'instance. J'ai vu un couple de sites Web recommandant cette approche au problème, mais ils ont tous un nombre défini de fois.

Répondre

0

Lors de l'arrêt de l'application, vous devez appeler

 scheduler.shutdown(); 

Parfois, vous devez faire un Thread.sleep (1000); pour le laisser se fermer correctement aussi. Faites cela dans un écouteur ContextLoad ou un autre hook d'arrêt que vous avez.

Pour l'instance dépend de la façon dont vous avez mis en place le quartz, mais le planificateur par défaut peut être obtenu comme ceci:

 Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); 

Voir http://www.quartz-scheduler.org/docs/1.x/quick_start_guide.html pour plus d'informations

1

Quartz est livré avec un servlet spécifiquement pour à partir & arrêter le planificateur au démarrage de l'application et l'arrêt il suffit d'ajouter les éléments suivants à votre web.xml:

<servlet> 
    <servlet-name>QuartzInitializer</servlet-name> 
    <servlet-class>org.quartz.ee.servlet.QuartzInitializerServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
1

Si vous voulez arrêter sans attendre les travaux d'exécution pour terminer l'utilisation:

scheduler.shutdown(false); 

Vérifiez this page pour plus d'informations.

Questions connexes