фоновые потоки tomcat
У меня запущен экземпляр tomcat 6.20, и я хотел бы отправить электронное письмо через фоновый поток, чтобы функция отправки электронной почты не блокировала запрос.
Есть ли способ, которым я могу выполнить поток в фоновом режиме, все еще позволяя нормальному потоку страниц происходить.
Приложение написано в ледяных полях.
Спасибо.
3 ответа:
- Создайте
Executor
, используяjava.util.concurrent.Executors.newCachedThreadPool
(или один из других заводских методов) в методе инициализации контроллера/сервлета.- Когда приходит запрос, оберните логику отправки почты в
java.lang.Runnable
- Отправить
Runnable
вExecutor
Это будет выполнять отправку в фоновом режиме. Не забудьте создать один исполнитель при запуске и поделиться всеми запросами; не создавайте каждый раз новый исполнитель (вы можете, но это будет немного медленно и расточительно).
Поместите отправку электронной почты вместо
Thread.sleep()
. Поместите выходные данные вместоsendRedirect()
.public void doUrlRequest(HttpServletRequest request, HttpServletResponse response) { try { response.sendRedirect("/home"); } catch (IOException e) { CustomLogger.info(TAG, "doUrlRequest", "doUrlRequest(): "+e.getMessage()); } (new Thread() { public void run() { try { Thread.sleep(9000); System.out.println("Awoken!"); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }).start();
Я нашел выход. Эти теги
@PostConstruct()
И
@PreDestroy()
Создайте в сервлете 2 метода, которые возвращают void и не принимают параметров. поместите 1-й тег непосредственно над первым методом и 2-й тег над вторым.
Сущность тегов
Метод @PostConstruct вызывается контейнером до того, как реализующий класс начнет отвечать на запросы клиентов веб-службы.Метод @PreDestroy вызывается контейнером перед конечной точкой. снят с эксплуатации.
Внутри метода PostConstruction () создайте поток с помощью интерфейса runnable и запустите его в бесконечном цикле, если значение определенной булевой переменной не равно false.
Используйте метод PreDestroy () для установки булевой переменной значения false.