У меня есть веб-приложение, развернутое в Tomcat. У меня есть набор кода, который проверяет базу данных на определенные данные и затем отправляет почту пользователям в зависимости от этих данных. Может кто-нибудь предложить, как планировать это в Tomcat.Как запланировать задачу в Tomcat
14
A
ответ
6
Это зависит от используемых библиотек. Некоторые библиотеки могут это сделать:
- Quartz/Example for Tomcat.
- Spring.
- A class from Java SE.
- Если вы запустите на GAE, взгляните на this.
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);
}
11
На самом деле, лучший способ планировать задачи в 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");
}
}
Наслаждайтесь :)
Смежные вопросы
- 1. Запланировать задачу
- 2. Как запланировать задачу программно
- 3. Запланировать задачу в Node.js
- 4. Как запланировать задачу в C++
- 5. Как запланировать задачу в OCaml?
- 6. Запланировать задачу после развертывания
- 7. Запланировать некоторую задачу в Acumatica
- 8. Запланировать задачу в приложении ASP.NET
- 9. Как запланировать задачу в Java коде
- 10. Как запланировать задачу в приложении Java Swing?
- 11. Как запланировать задачу в Restful web-сервисах
- 12. Запланировать задачу каждые 7 вечера
- 13. Как запланировать задачу с графическим интерфейсом программного
- 14. Как запланировать задачу с помощью python
- 15. Запланировать задачу в Vista - Перезапуск системы
- 16. Лучший способ запланировать определенную задачу в Java
- 17. Запланировать задачу и продолжить, в C#
- 18. Play Framework - Запланировать задачу в точное время
- 19. Запланировать задачу для мониторинга запуска определенного процесса
- 20. iOS - Запланировать задачу - НЕ ЗАПУСКАЕТ состояние
- 21. Запланировать задачу каждый день, используя ScheduledExecutorService?
- 22. Spring: Запланировать задачу, которая принимает параметр
- 23. Можно запланировать задачу второй с помощью schtasks?
- 24. Как запланировать задачу, которая проходит ежедневно в 13.00 ч
- 25. Как запланировать задачу для будущего выполнения в параллельной библиотеке задач
- 26. Как точно запланировать задачу с фиксированной скоростью несколько на второй
- 27. Как запланировать задачу с помощью диспетчера аварийных сигналов
- 28. Как запланировать задачу через 1 неделю после регистрации
- 29. Как запланировать (и сбросить) задачу программно с помощью SpringFramwork?
- 30. Как запланировать задачу, чтобы открыть программу каждые 3 минуты?
Требование типа «... не должно использоваться в приложениях J2E, это не очень хорошая практика». без какой-либо дополнительной поддержки, вы, как вы уже догадались, не являются хорошей практикой. – zb226
'ScheduledExecutorService' и' cron4j' относительно легки и работают хорошо, если у вас есть только один экземпляр Tomcat. Однако этот подход не работает, когда вы развертываете и запускаете приложение в кластерной или балансированной нагрузке среде, поскольку вы рискуете, что каждый экземпляр запускает ту же задачу. Такие решения, как Quartz, имеют механизмы, позволяющие выполнять только одну из запущенных планировщиков. – Pixelstix