繁体   English   中英

如何在Tomcat中安排任务

[英]How to schedule a task in 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");
  }
}

请享用 :)

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

你可以使用一个监听器和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);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM