특정 들어오는 요청을 처리하는 서블릿이 있습니다. 우리는 이것을`UpdateUserStats '라고 부를 것입니다. 전화가 빠르길 바라지 만 합리적으로 값 비싼 업무를 수행해야한다는 요청이 필요합니다. UpdateUserStats 서블릿이 성공 또는 실패를 결정하는 모든 작업을 수행하고, 새 상태를 유지 한 다음 백그라운드 스레드를 대기열에 추가하고 즉시 성공을 반환하도록 큐에 넣는 것이 좋은 해결책이라고 생각했습니다.Java, Tomcat, ServletContextListener 및 백그라운드 스레드
이것은 좋은 것처럼 보이지만 종료를 처리하는 방법이 궁금합니다. 서버가 종료되면 더 이상 작업이 남아 있지 않을 때까지 백그라운드 스레드가 종료되지 않도록하고 싶습니다. 바람둥이 ServletContextListener를 사용하여 백그라운드 스레드가 서버가 다운되었다는 것을 알았고 대기열이 끝나면 종료하는 방법을 알았습니다. 그러나 이것이 어떻게 동작하는지 100 % 확신하지는 않습니다. 모든 요청이 처리 된 후에 만 contextDestroyed()
이됩니까? 인터페이스는 이것을 암시하는 것으로 보이지만 문서에서 찾지 못했습니다. 또한 Tomcat이 배경 스레드가 종료되지 않는다고 화를 내기 전에 얼마나 기다릴 지 궁금합니다.
이 문제를 해결하는 더 좋은 방법이 있습니까? 아마도 Spring이 마술 사후 요청 배경 작업 기능을 가지고 있다면 Spring 애플리케이션이다.