#java #multithreading #spring-boot #rest #java.util.concurrent
Вопрос:
В приложении на основе Springboot я создаю поток для завершения пакетного задания и немедленно возвращаюсь обратно. Теперь мне нужно принудительно прервать поток в некоторых сценариях, таких как тайм-аут.
Кто-нибудь может помочь мне исправить этот вариант использования?
Ответ №1:
Если вы используете Executors
платформу Java, вы можете просто использовать shutDown()
метод.
В противном случае вы можете отправить сигнал прерывания с помощью Thread.interrupt()
после завершения вашей задачи.
Ответ №2:
Вы можете использовать инструмент мониторинга Javamelody, встроенный в ваше приложение, который предоставляет вам удобную панель мониторинга всех текущих запущенных потоков и кнопку «Завершить» для завершения потока. Этот инструмент чрезвычайно легко интегрировать в приложения Spring Boot — вам просто нужно включить пару зависимостей в файл сборки. Кроме того, вы хотели бы защитить конечную точку панели мониторинга с помощью некоторой аутентификации — javamelody также предоставляет вам базовую функцию аутентификации.
Другой способ DIY-создать конечную точку в вашем приложении, чтобы возвращать идентификатор потока для пакетного процесса ( вам нужно будет дать какое-то значимое имя группе потоков tth, чтобы отличить ее от других потоков), и другую конечную точку, которая принимает идентификатор потока в качестве параметра и может остановить/убить поток.