2010-09-28 1 views
3

Мы запускаем наше веб-приложение, и мы начинаем некоторые темы для фоновой работы, а также кварца. Когда я пытаюсь отключить tomcat (используя сценарий оболочки в linux), я всегда получаю сообщение об ошибке, которое не удалось завершить tomcat из-за потоков демона и потоков Quartz. Мы попытались по-разному отключить наши потоки (выйти из метода run), но мы полагаемся на несколько статических переменных класса, чтобы сделать это, которые становятся нулевыми к тому времени, когда мой выключенный слушатель получает обратный вызов.Tomcat не закрывается из-за потоков daemon

Есть ли стандартный подход к закрытию tomcat для такого сценария?

ответ

5

И теперь для возможного ответа (если вы используете Spring), проверьте this thread. Если вы используете Spring, вы можете добавить явное предложение destroy в свою конфигурацию пружины для кварца, чтобы он мог нормально завершить работу.

В противном случае слушатель сервлета (я думаю, слушатель ServletContext, но это было время ...) может обнаружить выключение, и вы можете вручную отключить Quartz.

2

Не ответ, но хорошо знаю:

Виртуальная машина Java не предоставляет никаких гарантий завершения работы демона потоков. Они просто останавливаются. Нет, наконец, нет мусора, ничего.

0

FInally, я смог его получить. Проблема была не в tomcat, а в том, как наше приложение подало иск на Initialize. Мы перенесли инициализацию нашего приложения (класс, который запускает эти потоки) в слушатель, как в соответствии с спецификацией сервлета, сервлеты загружаются последними и выгружаются сначала, когда слушатели загружаются первым и выгружаются последними с сервера. Весна ссылка предоставлена ​​extraneon была очень полезной