Mal*_*Tec 21 java jsp servlets scheduled-tasks background-process
我希望每隔6小时从订阅中检索并将订阅源存储到DB.我想在后台有一个计时器线程来完成这个任务.
什么是最好的方式?普通的计时器线程或Quartz API?
Bal*_*usC 40
首先,我不会使用JSP.那里不是.
当您使用Java EE 5时,请使用容器提供的jobscheduling API.更多细节取决于您正在使用的容器.例如,JBoss AS 5随附了Quartz.或者当你在JSP/Servlet之上使用一个提供jobscheduling API的框架时,就像Spring一样,那么你应该使用它.
如果没有(例如,您只使用Tomcat 6),或者您希望独立于容器和/或框架,请ServletContextListener使用a 创建ScheduledExecutorService.在这个答案中可以找到更多细节.
或者当您已经使用支持EJB 3.1的Java EE 6容器(JBoss AS 6,GlassFish 3,但不支持 Tomcat 7)时,最简单的方法是@Singleton使用@Schedule方法创建EJB .
@Singleton
public class UpdateSubscriptions {
@Schedule(hour="*/6", minute="0", second="0", persistent=false)
public void run() {
// Do your job here.
}
}
Run Code Online (Sandbox Code Playgroud)
而已.无需进一步配置.
更新:根据评论,您使用的是Tomcat(6或7?).要在webapp启动期间启动一个线程,每6个小时运行一次任务,请使用前连接答案中提供的示例,并在scheduleAtFixedRate()方法中进行以下更改
scheduler.scheduleAtFixedRate(new UpdateSubscriptions(), 0, 6, TimeUnit.HOURS);
Run Code Online (Sandbox Code Playgroud)
该类UpdateSubscriptions必须实现Runnable,并且实际的工作需要在run()您使用的方法中完成@Override,就像链接的答案中的示例一样.