SimpleAsyncTaskExecutor
не имеет значимого состояния, не требует корректного выключения. Кроме того, я не уверен, что вы подразумеваете под «потоком выполняется весь жизненный цикл веб-приложения» - на какой поток вы ссылаетесь?
Однако порождаемые им потоки могут препятствовать завершению работы вашего сервера. SimpleAsyncTaskExecutor
использует ThreadFactory
для создания своих потоков, и по умолчанию созданные потоки не являются потоками демона, и поэтому все порожденные потоки, которые все еще выполняются при инициализации завершения, будут продолжаться, и сервер будет завершаться только тогда, когда из этих порожденных нитей закончились.
В качестве решения я предлагаю использовать ThreadPoolTaskExecutor
вместо SimpleAsyncTaskExecutor
. У него есть логическое свойство, которое контролирует, что происходит при завершении работы, и может при необходимости принудительно завершить пул потоков.
Если вы все еще хотите использовать SimpleAsyncTaskExecutor
, вы можете добавить его к пользовательскому ThreadFactory
, который создает потоки deamon. Это позволит серверу завершить работу независимо от состояния этих порожденных потоков. Однако это может быть опасно, если эти потоки могут оставить ресурсы в нестабильном состоянии.
Spring предоставляет дружественную к бину реализацию ThreadFactory
(CustomizableThreadFactory
), которую вы можете вставить в SimpleAsyncTaskExecutor
, установив для свойства daemon
значение false
.