Tomcat не закрывается корректно из-за потоков демона - PullRequest
3 голосов
/ 28 сентября 2010

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

Существует ли стандартный подход к отключению tomcat для такого сценария?

Ответы [ 3 ]

5 голосов
/ 28 сентября 2010

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

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

3 голосов
/ 28 сентября 2010

Не ответ, но полезно знать:

JVM не предоставляет никаких гарантий отключения для потоков демона. Они просто останавливаются. Нет, наконец, нет сборки мусора, ничего.

0 голосов
/ 29 сентября 2010

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

...