Подтвердить что ты не робот

Как запланировать задачу в Tomcat

У меня есть веб-приложение, развернутое в Tomcat. У меня есть набор кода, который проверяет базу данных на определенные данные и затем отправляет почту пользователям в зависимости от этих данных. Может кто-нибудь предложить, как планировать это в Tomcat.

4b9b3361

Ответ 1

На самом деле, лучший способ запланировать задачу в Tomcat - использовать ScheduledExecutorService. TimeTask не должен использоваться в приложениях J2E, это не очень хорошая практика.

Пример с правильным способом:

создайте пакет, отличный от вашего контроллера (пакет сервлетов), и создайте новый класс 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");
  }
}

Наслаждайтесь:)

Ответ 3

Вы можете использовать прослушиватель и 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);
    }