diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/config/SensitiveWordsConfig.java b/austin-handler/src/main/java/com/java3y/austin/handler/config/SensitiveWordsConfig.java index d69a8e0..46a757a 100644 --- a/austin-handler/src/main/java/com/java3y/austin/handler/config/SensitiveWordsConfig.java +++ b/austin-handler/src/main/java/com/java3y/austin/handler/config/SensitiveWordsConfig.java @@ -9,9 +9,11 @@ import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.springframework.core.task.TaskExecutor; import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.util.ObjectUtils; import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -67,6 +69,11 @@ public class SensitiveWordsConfig { @Autowired private ResourceLoader resourceLoader; + /** + * 是否终止线程 + */ + private volatile boolean stop = false; + /** * 初始化敏感词字典 */ @@ -120,7 +127,7 @@ public class SensitiveWordsConfig { * 实现热更新,修改词典后自动加载 */ private void startScheduledUpdate() { - while (true) { + while (!stop) { try { TimeUnit.SECONDS.sleep(UPDATE_TIME_SECONDS); log.debug("SensitiveWordConfig#startScheduledUpdate start update..."); @@ -128,9 +135,22 @@ public class SensitiveWordsConfig { storeSensWords(); } catch (InterruptedException e) { log.error("SensitiveWordConfig#startScheduledUpdate interrupted: {}", e.getMessage()); + Thread.currentThread().interrupt(); break; } } } + /** + * onDestroy + */ + @PreDestroy + public void onDestroy() { + stop = true; + if (taskExecutor instanceof ThreadPoolTaskExecutor) { + ThreadPoolTaskExecutor threadPoolTaskExecutor = (ThreadPoolTaskExecutor) taskExecutor; + threadPoolTaskExecutor.shutdown(); + } + } + } diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/receipt/MessageReceipt.java b/austin-handler/src/main/java/com/java3y/austin/handler/receipt/MessageReceipt.java index 3e4d816..a5b10b0 100644 --- a/austin-handler/src/main/java/com/java3y/austin/handler/receipt/MessageReceipt.java +++ b/austin-handler/src/main/java/com/java3y/austin/handler/receipt/MessageReceipt.java @@ -25,10 +25,15 @@ public class MessageReceipt { @Autowired private List receiptMessageStaterList; + /** + * 是否终止线程 + */ + private volatile boolean stop = false; + @PostConstruct private void init() { SupportThreadPoolConfig.getPendingSingleThreadPool().execute(() -> { - while (true) { + while (!stop) { try { for (ReceiptMessageStater receiptMessageStater : receiptMessageStaterList) { //receiptMessageStater.start(); @@ -50,6 +55,7 @@ public class MessageReceipt { */ @PreDestroy public void onDestroy() { + this.stop = true; SupportThreadPoolConfig.getPendingSingleThreadPool().shutdown(); } diff --git a/austin-handler/src/main/java/com/java3y/austin/handler/receiver/redis/RedisReceiver.java b/austin-handler/src/main/java/com/java3y/austin/handler/receiver/redis/RedisReceiver.java index 0d6a154..15cfebc 100644 --- a/austin-handler/src/main/java/com/java3y/austin/handler/receiver/redis/RedisReceiver.java +++ b/austin-handler/src/main/java/com/java3y/austin/handler/receiver/redis/RedisReceiver.java @@ -48,6 +48,11 @@ public class RedisReceiver implements MessageReceiver { */ private ScheduledExecutorService scheduler; + /** + * 是否终止线程 + */ + private volatile boolean stop = false; + /** * 初始化调度线程池 */ @@ -92,7 +97,7 @@ public class RedisReceiver implements MessageReceiver { * @param consumer 消费处理逻辑 */ private void receiveMessage(String topic, Consumer consumer) { - while (true) { + while (!stop) { try { // 阻塞操作,减少CPU,IO消耗 Optional message = Optional.ofNullable( @@ -117,6 +122,7 @@ public class RedisReceiver implements MessageReceiver { */ @PreDestroy public void onDestroy() { + stop = true; scheduler.shutdown(); }