фоновые темы кота

У меня запущен экземпляр tomcat 6.20, и я хотел бы отправить электронное письмо через фоновый поток, чтобы функция отправки электронной почты не блокировала запрос.

Есть ли способ, которым я могу выполнить поток в фоновом режиме, в то же время позволяя нормальному потоку страниц.

Приложение написано на ICEfaces.

Спасибо.


person RaelG    schedule 28.07.2009    source источник


Ответы (3)


  1. Создайте Executor, используя java.util.concurrent.Executors.newCachedThreadPool (или один из других фабричных методов) в методе инициализации вашего контроллера/сервлета.
  2. Когда приходит запрос, оберните логику отправки почты в java.lang.Runnable
  3. Отправить Runnable в Executor

Это будет выполнять отправку в фоновом режиме. Не забудьте создать один Executor при запуске и использовать его для всех запросов; не создавайте новый Executor каждый раз (вы могли бы, но это было бы немного медленно и расточительно).

person skaffman    schedule 28.07.2009
comment
это должно быть j.u.c.Executors.newCachedThreadPool (с s), но кроме этого: согласовано - person WMR; 28.07.2009

Поместите отправку электронной почты вместо 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();
person Chloe    schedule 12.05.2018

Я нашел выход. Эти теги

@PostConstruct()

а также

@PreDestroy()

Создайте в своем сервлете 2 метода, которые возвращают void и не принимают никаких параметров. поместите 1-й тег непосредственно над первым методом и 2-й тег над вторым тегом.

Суть тегов

Метод @PostConstruct вызывается контейнером до того, как реализующий класс начинает отвечать клиентам веб-службы.

Метод @PreDestroy вызывается контейнером до того, как конечная точка будет удалена из работы.

внутри метода PostConstruction() создайте свой поток, используя интерфейс runnable, и запустите его в бесконечном цикле, если значение определенной логической переменной не равно false.

используйте метод PreDestroy(), чтобы установить для логической переменной значение false.

person GuruKay    schedule 13.08.2011