2011-03-18 52 views

回答

40

首先,我不会为此使用JSP。那里不适合。

当您使用Java EE 5时,请使用容器提供的jobscheduling API。进一步的细节取决于你使用的容器。例如JBoss AS 5带有Quartz。或者当您在提供jobscheduling API的JSP/Servlet之上使用框架时,如Spring,那么您应该使用它。

如果没有(例如,您只使用Tomcat 6),或者您希望独立于容器和/或框架,请使用ScheduledExecutorService创建一个ServletContextListener。更多细节可在this answer中找到。

或者当你已经在支持EJB 3.1的Java EE 6容器(JBoss AS中6,GlassFish的3,但这样的Tomcat 7),最简单的就是创建一个@Singleton EJB与@Schedule方法。

@Singleton 
public class UpdateSubscriptions { 

    @Schedule(hour="*/6", minute="0", second="0", persistent=false) 
    public void run() { 
     // Do your job here. 
    } 

}   

就是这样。不需要进一步的配置。


更新:根据意见,你使用的是Tomcat(6或7?)。要启动它运行的任务,每6小时Web应用程序的启动过程中一个线程,使用示例作为beforelinked answer提供,并在scheduleAtFixedRate()方法

scheduler.scheduleAtFixedRate(new UpdateSubscriptions(), 0, 6, TimeUnit.HOURS); 

以下更改类UpdateSubscriptions必须实现Runnable和实际工作需要,需要在run()方法中完成,您可以使用@Override,如链接答案中的示例。

+2

+1无法获得比这更完美的答案。 – asgs 2011-03-18 21:17:00

+0

我只使用Tomcat。我也看到了相关的答案。我打算在课堂上使用它,结果不会使用JSP。但是,servlet是更好的方法吗? 2.如果我把它放在一个servlet中,如链接答案中所示,它会不会每6小时创建一个新线程? – MalTec 2011-03-19 12:20:22

+0

这不是一个servlet。这是一个倾听者。并且在webapp的生命周期中只有它的一个实例(顺便说一句,这同样适用于servlet)。 – BalusC 2011-03-19 13:10:44

相关问题