有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我想从订阅中检索,并在每6小时后从订阅中将提要存储到DB。我想在后台有一个计时器线程来完成这个任务

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


共 (1) 个答案

  1. # 1 楼答案

    首先,我不会为此使用JSP。这不是给你的

    当您使用JavaEE5时,请使用容器提供的作业调度API。更多细节取决于您使用的容器。例如,JBoss AS 5随附了Quartz out the box。或者,当您在JSP/Servlet之上使用一个框架,该框架提供作业调度API,比如Spring,那么您应该使用它

    如果没有(例如,您只使用Tomcat 6),或者您希望独立于容器和/或框架,请使用^{}创建一个^{}。更多详细信息请参见this answer

    或者,当您已经在一个支持EJB3.1的JavaEE6容器上(JBoss AS 6,GlassFish 3,但因此而不是Tomcat 7)时,最简单的方法是使用^{}方法创建^{}EJB

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

    就这样。无需进一步配置


    更新:根据评论,您正在使用Tomcat(6或7?)。要在webapp启动期间启动每6小时运行一次任务的线程,请使用beforelinked answer中提供的示例,并在^{}方法中进行以下更改

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

    UpdateSubscriptions必须实现^{},实际工作需要在^{}方法中完成,就像链接答案中的示例一样