как отключить внутренние потоки в приложении spring boot

#java #multithreading #spring-boot #rest #java.util.concurrent

Вопрос:

В приложении на основе Springboot я создаю поток для завершения пакетного задания и немедленно возвращаюсь обратно. Теперь мне нужно принудительно прервать поток в некоторых сценариях, таких как тайм-аут.

Кто-нибудь может помочь мне исправить этот вариант использования?

Ответ №1:

Если вы используете Executors платформу Java, вы можете просто использовать shutDown() метод.

В противном случае вы можете отправить сигнал прерывания с помощью Thread.interrupt() после завершения вашей задачи.

Ответ №2:

Вы можете использовать инструмент мониторинга Javamelody, встроенный в ваше приложение, который предоставляет вам удобную панель мониторинга всех текущих запущенных потоков и кнопку «Завершить» для завершения потока. Этот инструмент чрезвычайно легко интегрировать в приложения Spring Boot — вам просто нужно включить пару зависимостей в файл сборки. Кроме того, вы хотели бы защитить конечную точку панели мониторинга с помощью некоторой аутентификации — javamelody также предоставляет вам базовую функцию аутентификации.

Другой способ DIY-создать конечную точку в вашем приложении, чтобы возвращать идентификатор потока для пакетного процесса ( вам нужно будет дать какое-то значимое имя группе потоков tth, чтобы отличить ее от других потоков), и другую конечную точку, которая принимает идентификатор потока в качестве параметра и может остановить/убить поток.

введите описание изображения здесь