我想从订阅检索,并存储订阅后每6小时从DB馈送。我想在后台有一个定时器线程来完成这个任务。
最好的方法是什么?是普通的计时器线程还是Quartz API?
发布于 2011-03-19 05:10:27
首先,我不会使用JSP。这不是为了。
在使用JavaEE5时,可以使用容器提供的作业调度API来实现这一点。更多细节取决于您使用的容器。例如,Quartz AS 5开箱即装了JBoss。或者,当您使用JSP/Servlet之上提供作业调度API的框架时,如Spring,那么您应该使用它。
如果没有(例如,您只使用Tomcat6),或者您希望独立于容器和/或框架,则使用ScheduledExecutorService
创建一个ServletContextListener
。更多细节可以在this answer上找到。
或者,当您已经在支持EJB3.1(TomcatAS6、Tomcat3,但不支持JBoss 7)的JavaEE6容器上时,最简单的方法是使用@Schedule
方法创建一个@Singleton
GlassFish。
@Singleton
public class UpdateSubscriptions {
@Schedule(hour="*/6", minute="0", second="0", persistent=false)
public void run() {
// Do your job here.
}
}
就这样。不需要进一步配置。
Tomcat :根据评论,您使用的是Tomcat6还是7?要在webapp启动期间启动线程(每6小时运行一次任务),请使用beforelinked answer中提供的示例,并在scheduleAtFixedRate()
方法中进行以下更改
scheduler.scheduleAtFixedRate(new UpdateSubscriptions(), 0, 6, TimeUnit.HOURS);
类UpdateSubscriptions
必须实现Runnable
,并且实际的工作需要在您@Override
的run()
方法中完成,如链接答案中的示例所示。
https://stackoverflow.com/questions/5357033
复制相似问题