У меня есть сервлет, который обрабатывает определенный входящий запрос.Мы назовем это UpdateUserStats.Я хочу, чтобы звонок был быстрым, но мне также нужен запрос для выполнения достаточно дорогой задачи.Я подумал, что это может быть хорошим решением, если я позволю сервлету UpdateUserStats выполнить всю работу, которая определяет успех или неудачу, сохранит новое состояние, а затем поставит в очередь некоторую работу для фонового потока, чтобы позаботиться и немедленно вернуть успех.1001 *
Это кажется хорошим, но мне интересно, как справиться с выключением.Когда сервер выключается, я хочу убедиться, что он не уничтожает фоновый поток, пока не останется больше работы.Я думал об использовании tomcat ServletContextListener, чтобы фоновый поток знал, что сервер отключается, и можно завершить работу, когда очередь заканчивается, но я не уверен на 100%, как это будет себя вести.Будет ли contextDestroyed()
только после того, как все запросы будут обработаны?Интерфейс, кажется, подразумевает это, но я не нашел его в документации.Кроме того, мне интересно, сколько времени Tomcat готов подождать, прежде чем разозлиться, что фоновый поток не завершается.
Альтернативно, есть ли лучший способ справиться с этой проблемой?Это приложение Spring, если, возможно, Spring обладает какой-то волшебной функциональностью фоновой работы после запроса.