JSP / Servlet Web应用程序中的后台计时器任务
我想从订阅中检索信息,并每隔6小时将订阅中的订阅源存储到DB中。我想在后台使用计时器线程来完成此任务。
最好的方法是什么?普通计时器线程还是Quartz API?
回答:
首先,我不会为此使用JSP。那里不是。
使用Java EE 5时,请使用容器提供的作业计划API。详细信息取决于您使用的容器。例如,JBoss AS 5附带了Quartz。或者,当您在JSP /
Servlet之上使用提供作业调度API的框架(例如Spring)时,则应使用它。
如果不存在(例如,您仅使用Tomcat
6),或者想要独立于容器和/或框架,请使用创建ServletContextListener
一个ScheduledExecutorService
。
或者,当您已经在支持EJB 3.1的Java EE 6容器(JBoss AS 6,GlassFish 3,但 不支持 Tomcat
7)上时,最简单的方法就是@Singleton
使用@Schedule
方法创建EJB
。
@Singletonpublic class UpdateSubscriptions {
@Schedule(hour="*/6", minute="0", second="0", persistent=false)
public void run() {
// Do your job here.
}
}
而已。无需其他配置。
:根据评论,您正在使用Tomcat(6或7?)。要在每6小时运行一次任务的webapp启动期间启动线程,请使用之前链接的答案中提供的示例,并对scheduleAtFixedRate()
方法进行以下更改
scheduler.scheduleAtFixedRate(new UpdateSubscriptions(), 0, 6, TimeUnit.HOURS);
该类UpdateSubscriptions
必须实现Runnable
,并且实际的工作需要以您所使用的run()
方法完成@Override
,就像链接答案中的示例一样。
以上是 JSP / Servlet Web应用程序中的后台计时器任务 的全部内容, 来源链接: utcz.com/qa/397659.html