Это расширение ответа jhouse.Я не могу поместить этот код в комментарий: - (.
В частности, вам нужно добавить ServletContextListener в ваш web.xml:
<listener>
<listener-class>org.whatever.MyListener</listener-class>
</listener>
Затем в реализации, вМетод context contextDestroyed (), спит 10 секунд (1 секунды не хватило для моего приложения). Он должен выглядеть примерно так:
public class MyListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent arg0) {}
/**
* @see ServletContextListener#contextDestroyed(ServletContextEvent)
*/
public void contextDestroyed(ServletContextEvent arg0) {
try {
// This can't use logging because it's (hopefully) been shut down by now.
System.out.println("Sleep for a bit so that we don't get any errors about Quartz threads not being shut down yet. ");
// For more info, see here: /1679334/oshibka-vyklycheniya-planirovschika-spring
Thread.sleep(10 * 1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Мне не нужно вызывать методы выключения планировщика (этобыло ясно, что они уже где-то вызывались, может быть, потому что я использую Spring). Все, что мне нужно было сделать, это добавить ожидание, а затем все они ушли (за исключением потока FileWatchdog Log4j и некоторого другого потока MySQL, но они отличаютсявопросы).