首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JSP/Servlet web应用程序中的后台计时器任务

JSP/Servlet web应用程序中的后台计时器任务
EN

Stack Overflow用户
提问于 2011-03-19 03:41:53
回答 1查看 24.8K关注 0票数 21

我想从订阅检索,并存储订阅后每6小时从DB馈送。我想在后台有一个定时器线程来完成这个任务。

最好的方法是什么?是普通的计时器线程还是Quartz API?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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。

代码语言:javascript
运行
复制
@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()方法中进行以下更改

代码语言:javascript
运行
复制
scheduler.scheduleAtFixedRate(new UpdateSubscriptions(), 0, 6, TimeUnit.HOURS);

UpdateSubscriptions必须实现Runnable,并且实际的工作需要在您@Overriderun()方法中完成,如链接答案中的示例所示。

票数 40
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5357033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档