Согласно спецификациям CommonJ, WorkManager попытается остановить выполнение Работы, только если его метод isDaemon () вернет true.Предполагается, что работы, не являющиеся демонами, будут краткосрочными, поэтому их не нужно останавливать.
Проблема заключается в том, что по умолчанию метод isDaemon () реализации Work, используемый Spring (и который фактически оборачиваетсяRunnable) возвращает false.Вы можете изменить это, заставив свой Runnable реализовать SchedulingAwareRunnable.
Однако этого недостаточно.Если WorkManager решает остановить работу, он вызывает Work # release (), и сама работа отвечает за его остановку.В частности, WorkManager не будет пытаться прервать поток, выполняющий работу (потому что это ненадежный способ остановить поток).Проблема в том, что реализация Work, используемая Spring, имеет пустую реализацию для метода release (), поэтому вы не можете использовать эту функцию.
Подводя итог: если вы хотите использовать Spring, единственный способубедиться, что выполнение остановлено, значит спроектировать собственный механизм для этого.
Обратите внимание, что все еще интересно использовать SchedulingAwareRunnable, потому что это позволит избежать предупреждений, генерируемых монитором потоков WebSphere (о зависании потоков).