【问题标题】:Periodic task on Tomcat serverTomcat 服务器上的定期任务
【发布时间】:2017-10-31 16:24:08
【问题描述】:

我需要一个每天晚上在 tomcat 服务器上运行的 java 例程。关于如何做到这一点的任何想法? 我尝试在 mysql 中做类似事件/时间表的事情

【问题讨论】:

  • 你可能想看看Quartz scheduler
  • 如果它更像一个脚本或其他东西,你可以使用 linux cron 作业(我假设你在 linux 上,Windows 也有一个等价物)
  • 您需要任务在 Tomcat 中运行,还是只在托管它的机器上运行?
  • 我需要我的应用程序每晚比较注册的日期与当前日期,如果它们重合则执行另一个例程
  • 请求家庭作业帮助的问题必须包括您迄今为止为解决问题所做的工作摘要,以及对您在解决它时遇到的困难(help centerHow to Ask)。

标签: java mysql tomcat


【解决方案1】:

问这个问题已经有一段时间了,但最近我遇到了类似的问题,想分享我的解决方案。

我所做的只是创建一个 ServletContextListener 来创建一个 ScheduledExecutorService:

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

@WebListener
public class BackgroundJobManager implements ServletContextListener {    
    private ScheduledExecutorService scheduler;

    @Override
    public void contextInitialized(ServletContextEvent event) {
        this.scheduler = Executors.newSingleThreadScheduledExecutor();
        this.scheduler.scheduleAtFixedRate(new JobClass(), 1, 1, TimeUnit.DAYS);
    }

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        scheduler.shutdownNow();
    }
}

此代码每天执行一次JobClassJobClass 必须实现 java.lang.Runnable

【讨论】:

    【解决方案2】:

    纯Java 解决方案是使用Quartz。如果不需要纯 java,我推荐一个简单的cron 工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      • 2017-10-31
      • 2014-04-20
      • 1970-01-01
      • 2013-10-09
      • 1970-01-01
      • 2011-09-26
      相关资源
      最近更新 更多