如何在Tomcat中安排任务

我在Tomcat中部署了一个Web应用程序。 我有一组代码,用于检查数据库中的某些数据,然后根据该数据向用户发送邮件。 有人可以建议如何在Tomcat中安排这个。

实际上,在Tomcat中安排任务的最佳方法是使用ScheduledExecutorService。 不应在J2E应用程序中使用TimeTask,这不是一个好习惯。

正确的例子:

创建一个与控制器一个不同的包(servlet包),并在这个新包上创建一个新的java类,例如:

// your package 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) { scheduler = Executors.newSingleThreadScheduledExecutor(); // scheduler.scheduleAtFixedRate(new DailyJob(), 0, 1, TimeUnit.DAYS); scheduler.scheduleAtFixedRate(new HourlyJob(), 0, 1, TimeUnit.HOURS); //scheduler.scheduleAtFixedRate(new MinJob(), 0, 1, TimeUnit.MINUTES); // scheduler.scheduleAtFixedRate(new SecJob(), 0, 15, TimeUnit.SECONDS); } @Override public void contextDestroyed(ServletContextEvent event) { scheduler.shutdownNow(); } } 

之后,您可以创建其他java类(每个计划一个),如下所示:

 public class HourlyJob implements Runnable { @Override public void run() { // Do your hourly job here. System.out.println("Job trigged by scheduler"); } } 

请享用 :)

这取决于您使用的库。 有几个库可以做到这一点:

  • Quartz / Tomcat示例 。
  • spring
  • 来自Java SE的类 。
  • 如果你在GAE上运行,请看一下。

你可以使用一个监听器和cron4j :

 @WebListener public class StartListener implements ServletContextListener { @Override public void contextInitialized(final ServletContextEvent servletContextEvent) { Scheduler scheduler = new Scheduler(); scheduler.schedule("0 * * * *", new Task()); scheduler.start(); servletContextEvent.getServletContext().setAttribute("SCHEDULER", scheduler); }