2010-10-09 98 views
2

我在我的web应用程序中有Guice的Quartz调度程序。我跟着代码找到here。一切正常,但我无法弄清楚如何关闭调度程序。我的上下文侦听器看起来是这样的:关机石英调度程序

public class MyAppContextListener extends GuiceServletContextListener{ 

    @Override 
    protected Injector getInjector() { 
     return Guice.createInjector(new QuartzModule(), new MyAppServletModule()); 
    } 
} 

和石英模块如下所示:

public class QuartzModule extends AbstractModule { 

@Override 
protected void configure() { 
    bind(SchedulerFactory.class).to(StdSchedulerFactory.class).in(Scopes.SINGLETON); 
    bind(GuiceJobFactory.class).in(Scopes.SINGLETON); 
    bind(Quartz.class).in(Scopes.SINGLETON); 
} 

什么是关机调度的最佳途径时,应用程序被停止或取消部署?

回答

3

您可以使用​​。

当wep-app停止时,应用程序服务器将调用contextDestroyed()

这会给你时间打电话必需品您QuartzModule(在contextDestroyed()方法中)在web-app停止之前。

只记得在您的网络应用程序的web.xml中添加<listener>标记。

+0

我想过使用contextDestroyed,但我怎么才能访问注入器在contextDestroyed()方法? – jjczopek 2010-10-09 21:33:25

+0

如果你看看QuartzModule类,它被定义为SINGLETON,所以VM中只有一个Quartz实例。所以无论你从哪里获得实例,它都将是相同的Quartz实例。 contextDestroyed()中的以下内容应该可以工作:i.getInstance(Quartz.class).shutdown(); – Koekiebox 2010-10-10 15:09:48

+0

我有同样的问题,但这个答案不帮助我。由于ServletContexListener不是由guice创建的,我将如何在那里获得注入器? – 0lukasz0 2011-12-22 17:09:07