From e50fde3ed687db63ad5462638ba5b3ff9529f6ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=8E=E9=9B=A8=E8=A1=8C?= <2283550574@qq.com> Date: Tue, 30 May 2023 20:55:19 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E6=B1=A0=E4=BB=BB=E5=8A=A1=E5=BC=82=E5=B8=B8=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=97=A0=E6=B3=95=E8=8E=B7=E5=8F=96=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/common/config/ThreadPoolConfig.java | 12 ++++++++++++ .../handler/GlobalUncaughtExceptionHandler.java | 17 +++++++++++++++++ .../common/user/service/impl/IpServiceImpl.java | 17 ++++++++++++----- 3 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/GlobalUncaughtExceptionHandler.java diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/common/config/ThreadPoolConfig.java b/mallchat-common/src/main/java/com/abin/mallchat/common/common/config/ThreadPoolConfig.java index 9650c0a..1fee693 100644 --- a/mallchat-common/src/main/java/com/abin/mallchat/common/common/config/ThreadPoolConfig.java +++ b/mallchat-common/src/main/java/com/abin/mallchat/common/common/config/ThreadPoolConfig.java @@ -1,5 +1,8 @@ package com.abin.mallchat.common.common.config; +import cn.hutool.core.thread.NamedThreadFactory; +import cn.hutool.core.thread.ThreadFactoryBuilder; +import com.abin.mallchat.common.common.handler.GlobalUncaughtExceptionHandler; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; @@ -8,6 +11,7 @@ import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import java.util.concurrent.Executor; +import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; /** @@ -41,6 +45,10 @@ public class ThreadPoolConfig implements AsyncConfigurer { executor.setQueueCapacity(200); executor.setThreadNamePrefix("mallchat-executor-"); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());//满了调用线程执行,认为重要任务 + executor.getThreadPoolExecutor().setThreadFactory( + new ThreadFactoryBuilder() + .setUncaughtExceptionHandler(new GlobalUncaughtExceptionHandler("mallchat-executor-")).build() + ); executor.initialize(); return executor; } @@ -53,6 +61,10 @@ public class ThreadPoolConfig implements AsyncConfigurer { executor.setQueueCapacity(1000);//支持同时推送1000人 executor.setThreadNamePrefix("websocket-executor-"); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());//满了直接丢弃,默认为不重要消息推送 + executor.getThreadPoolExecutor().setThreadFactory( + new ThreadFactoryBuilder() + .setUncaughtExceptionHandler(new GlobalUncaughtExceptionHandler("websocket-executor-")).build() + ); executor.initialize(); return executor; } diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/GlobalUncaughtExceptionHandler.java b/mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/GlobalUncaughtExceptionHandler.java new file mode 100644 index 0000000..79ad561 --- /dev/null +++ b/mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/GlobalUncaughtExceptionHandler.java @@ -0,0 +1,17 @@ +package com.abin.mallchat.common.common.handler; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class GlobalUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler { + private String name; + public GlobalUncaughtExceptionHandler(){} + public GlobalUncaughtExceptionHandler(String name){ + this.name=name; + } + @Override + public void uncaughtException(Thread t, Throwable e) { + log.error("current thread ",t.getName()," is error[{}]",e); + } + +} diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/user/service/impl/IpServiceImpl.java b/mallchat-common/src/main/java/com/abin/mallchat/common/user/service/impl/IpServiceImpl.java index c443958..877abb1 100644 --- a/mallchat-common/src/main/java/com/abin/mallchat/common/user/service/impl/IpServiceImpl.java +++ b/mallchat-common/src/main/java/com/abin/mallchat/common/user/service/impl/IpServiceImpl.java @@ -1,16 +1,19 @@ package com.abin.mallchat.common.user.service.impl; import cn.hutool.core.lang.TypeReference; + import cn.hutool.core.thread.NamedThreadFactory; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONUtil; +import com.abin.mallchat.common.common.handler.GlobalUncaughtExceptionHandler; import com.abin.mallchat.common.user.dao.UserDao; import com.abin.mallchat.common.user.domain.dto.IpResult; import com.abin.mallchat.common.user.domain.entity.IpDetail; import com.abin.mallchat.common.user.domain.entity.IpInfo; import com.abin.mallchat.common.user.domain.entity.User; import com.abin.mallchat.common.user.service.IpService; +import jodd.util.concurrent.ThreadFactoryBuilder; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.annotation.Autowired; @@ -18,10 +21,7 @@ import org.springframework.stereotype.Service; import java.util.Date; import java.util.Objects; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; +import java.util.concurrent.*; /** * Description: ip @@ -33,11 +33,16 @@ import java.util.concurrent.TimeUnit; public class IpServiceImpl implements IpService, DisposableBean { private static ExecutorService executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, - new LinkedBlockingQueue(500), new NamedThreadFactory("refresh-ipDetail", false)); + new LinkedBlockingQueue(500), + new NamedThreadFactory("refresh-ipDetail", (ThreadGroup)null,false, + new GlobalUncaughtExceptionHandler("refresh-ipDetail"))); @Autowired private UserDao userDao; + + + @Override public void refreshIpDetailAsync(Long uid) { executor.execute(() -> { @@ -116,5 +121,7 @@ public class IpServiceImpl implements IpService, DisposableBean { log.error("Timed out while waiting for executor [{}] to terminate", executor); } } + + } } From 1decddb6b113d97dac5886d89519bb1373e23828 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=8E=E9=9B=A8=E8=A1=8C?= <2283550574@qq.com> Date: Tue, 30 May 2023 23:52:35 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E6=B1=A0=E9=94=99=E8=AF=AF=E6=97=A5=E5=BF=97=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/config/ThreadPoolConfig.java | 13 ++++------ .../common/factory/MyThreadFactory.java | 24 +++++++++++++++++++ .../GlobalUncaughtExceptionHandler.java | 2 +- .../handler/MyUncaughtExceptionHandler.java | 19 +++++++++++++++ 4 files changed, 49 insertions(+), 9 deletions(-) create mode 100644 mallchat-common/src/main/java/com/abin/mallchat/common/common/factory/MyThreadFactory.java create mode 100644 mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/MyUncaughtExceptionHandler.java diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/common/config/ThreadPoolConfig.java b/mallchat-common/src/main/java/com/abin/mallchat/common/common/config/ThreadPoolConfig.java index 1fee693..2ff719a 100644 --- a/mallchat-common/src/main/java/com/abin/mallchat/common/common/config/ThreadPoolConfig.java +++ b/mallchat-common/src/main/java/com/abin/mallchat/common/common/config/ThreadPoolConfig.java @@ -2,6 +2,7 @@ package com.abin.mallchat.common.common.config; import cn.hutool.core.thread.NamedThreadFactory; import cn.hutool.core.thread.ThreadFactoryBuilder; +import com.abin.mallchat.common.common.factory.MyThreadFactory; import com.abin.mallchat.common.common.handler.GlobalUncaughtExceptionHandler; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -45,10 +46,7 @@ public class ThreadPoolConfig implements AsyncConfigurer { executor.setQueueCapacity(200); executor.setThreadNamePrefix("mallchat-executor-"); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());//满了调用线程执行,认为重要任务 - executor.getThreadPoolExecutor().setThreadFactory( - new ThreadFactoryBuilder() - .setUncaughtExceptionHandler(new GlobalUncaughtExceptionHandler("mallchat-executor-")).build() - ); + executor.setThreadFactory(new MyThreadFactory(executor.getThreadNamePrefix())); executor.initialize(); return executor; } @@ -61,11 +59,10 @@ public class ThreadPoolConfig implements AsyncConfigurer { executor.setQueueCapacity(1000);//支持同时推送1000人 executor.setThreadNamePrefix("websocket-executor-"); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());//满了直接丢弃,默认为不重要消息推送 - executor.getThreadPoolExecutor().setThreadFactory( - new ThreadFactoryBuilder() - .setUncaughtExceptionHandler(new GlobalUncaughtExceptionHandler("websocket-executor-")).build() - ); + executor.setThreadFactory(new MyThreadFactory(executor.getThreadNamePrefix())); executor.initialize(); return executor; } + + } diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/common/factory/MyThreadFactory.java b/mallchat-common/src/main/java/com/abin/mallchat/common/common/factory/MyThreadFactory.java new file mode 100644 index 0000000..6dd9871 --- /dev/null +++ b/mallchat-common/src/main/java/com/abin/mallchat/common/common/factory/MyThreadFactory.java @@ -0,0 +1,24 @@ +package com.abin.mallchat.common.common.factory; + +import com.abin.mallchat.common.common.handler.MyUncaughtExceptionHandler; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.concurrent.CustomizableThreadFactory; + +import java.util.concurrent.ThreadFactory; + +@Slf4j +public class MyThreadFactory implements ThreadFactory { + + private String name; + public MyThreadFactory(String name){ + this.name=name; + } + public MyThreadFactory(){} + + @Override + public Thread newThread(Runnable r) { + Thread thread = new Thread(r); + thread.setUncaughtExceptionHandler(new MyUncaughtExceptionHandler(name)); + return thread; + } +} diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/GlobalUncaughtExceptionHandler.java b/mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/GlobalUncaughtExceptionHandler.java index 79ad561..12dde06 100644 --- a/mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/GlobalUncaughtExceptionHandler.java +++ b/mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/GlobalUncaughtExceptionHandler.java @@ -11,7 +11,7 @@ public class GlobalUncaughtExceptionHandler implements Thread.UncaughtException } @Override public void uncaughtException(Thread t, Throwable e) { - log.error("current thread ",t.getName()," is error[{}]",e); + log.error("current thread name is",t.getName()," is error[{}]",e); } } diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/MyUncaughtExceptionHandler.java b/mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/MyUncaughtExceptionHandler.java new file mode 100644 index 0000000..6348ca8 --- /dev/null +++ b/mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/MyUncaughtExceptionHandler.java @@ -0,0 +1,19 @@ +package com.abin.mallchat.common.common.handler; + +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@AllArgsConstructor +@NoArgsConstructor +public class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler { + private String name; + + @Override + public void uncaughtException(Thread t, Throwable e) { + log.error("线程池名称:[{}],错误信息如下:",name); + e.printStackTrace(); + } + +} From e0963e88bdbe40980347b7856f85909b34cebb0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=8E=E9=9B=A8=E8=A1=8C?= <2283550574@qq.com> Date: Wed, 31 May 2023 00:10:38 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E8=AE=A4=E5=87=86=E8=AF=A5=E6=AC=A1?= =?UTF-8?q?=E6=8F=90=E4=BA=A4,=E8=AF=B7=E7=9B=B4=E6=8E=A5=E5=BF=BD?= =?UTF-8?q?=E7=95=A5=E8=AF=A5=E5=8A=9F=E8=83=BD=E5=85=B6=E4=BB=96=E6=AC=A1?= =?UTF-8?q?=E7=9A=84=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/factory/MyThreadFactory.java | 14 +++++++------- .../GlobalUncaughtExceptionHandler.java | 12 +++++++----- .../handler/MyUncaughtExceptionHandler.java | 19 ------------------- 3 files changed, 14 insertions(+), 31 deletions(-) delete mode 100644 mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/MyUncaughtExceptionHandler.java diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/common/factory/MyThreadFactory.java b/mallchat-common/src/main/java/com/abin/mallchat/common/common/factory/MyThreadFactory.java index 6dd9871..463f2b7 100644 --- a/mallchat-common/src/main/java/com/abin/mallchat/common/common/factory/MyThreadFactory.java +++ b/mallchat-common/src/main/java/com/abin/mallchat/common/common/factory/MyThreadFactory.java @@ -1,24 +1,24 @@ package com.abin.mallchat.common.common.factory; -import com.abin.mallchat.common.common.handler.MyUncaughtExceptionHandler; +import com.abin.mallchat.common.common.handler.GlobalUncaughtExceptionHandler; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.scheduling.concurrent.CustomizableThreadFactory; import java.util.concurrent.ThreadFactory; @Slf4j +@AllArgsConstructor +@NoArgsConstructor public class MyThreadFactory implements ThreadFactory { private String name; - public MyThreadFactory(String name){ - this.name=name; - } - public MyThreadFactory(){} + @Override public Thread newThread(Runnable r) { Thread thread = new Thread(r); - thread.setUncaughtExceptionHandler(new MyUncaughtExceptionHandler(name)); + thread.setUncaughtExceptionHandler(new GlobalUncaughtExceptionHandler(name)); return thread; } } diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/GlobalUncaughtExceptionHandler.java b/mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/GlobalUncaughtExceptionHandler.java index 12dde06..319a715 100644 --- a/mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/GlobalUncaughtExceptionHandler.java +++ b/mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/GlobalUncaughtExceptionHandler.java @@ -1,17 +1,19 @@ package com.abin.mallchat.common.common.handler; +import lombok.AllArgsConstructor; +import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; @Slf4j +@AllArgsConstructor +@NoArgsConstructor public class GlobalUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler { private String name; - public GlobalUncaughtExceptionHandler(){} - public GlobalUncaughtExceptionHandler(String name){ - this.name=name; - } + @Override public void uncaughtException(Thread t, Throwable e) { - log.error("current thread name is",t.getName()," is error[{}]",e); + log.error("线程池名称:[{}],错误信息如下:",name); + e.printStackTrace(); } } diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/MyUncaughtExceptionHandler.java b/mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/MyUncaughtExceptionHandler.java deleted file mode 100644 index 6348ca8..0000000 --- a/mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/MyUncaughtExceptionHandler.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.abin.mallchat.common.common.handler; - -import lombok.AllArgsConstructor; -import lombok.NoArgsConstructor; -import lombok.extern.slf4j.Slf4j; - -@Slf4j -@AllArgsConstructor -@NoArgsConstructor -public class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler { - private String name; - - @Override - public void uncaughtException(Thread t, Throwable e) { - log.error("线程池名称:[{}],错误信息如下:",name); - e.printStackTrace(); - } - -} From bb37026f0a9429f286e2bc3445c2a11cba1a7658 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=8E=E9=9B=A8=E8=A1=8C?= <2283550574@qq.com> Date: Wed, 31 May 2023 13:30:20 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E6=B1=A0=E6=89=A7=E8=A1=8C=E4=BB=BB=E5=8A=A1=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E6=97=B6=E7=9A=84=E6=97=A5=E5=BF=97=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/common/config/ThreadPoolConfig.java | 4 ++-- .../common/common/factory/MyThreadFactory.java | 14 ++++++++------ .../handler/GlobalUncaughtExceptionHandler.java | 6 ++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/common/config/ThreadPoolConfig.java b/mallchat-common/src/main/java/com/abin/mallchat/common/common/config/ThreadPoolConfig.java index 2ff719a..687f7f4 100644 --- a/mallchat-common/src/main/java/com/abin/mallchat/common/common/config/ThreadPoolConfig.java +++ b/mallchat-common/src/main/java/com/abin/mallchat/common/common/config/ThreadPoolConfig.java @@ -46,7 +46,7 @@ public class ThreadPoolConfig implements AsyncConfigurer { executor.setQueueCapacity(200); executor.setThreadNamePrefix("mallchat-executor-"); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());//满了调用线程执行,认为重要任务 - executor.setThreadFactory(new MyThreadFactory(executor.getThreadNamePrefix())); + executor.setThreadFactory(new MyThreadFactory(executor)); executor.initialize(); return executor; } @@ -59,7 +59,7 @@ public class ThreadPoolConfig implements AsyncConfigurer { executor.setQueueCapacity(1000);//支持同时推送1000人 executor.setThreadNamePrefix("websocket-executor-"); executor.setRejectedExecutionHandler(new ThreadPoolExecutor.DiscardPolicy());//满了直接丢弃,默认为不重要消息推送 - executor.setThreadFactory(new MyThreadFactory(executor.getThreadNamePrefix())); + executor.setThreadFactory(new MyThreadFactory(executor)); executor.initialize(); return executor; } diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/common/factory/MyThreadFactory.java b/mallchat-common/src/main/java/com/abin/mallchat/common/common/factory/MyThreadFactory.java index 463f2b7..b3733eb 100644 --- a/mallchat-common/src/main/java/com/abin/mallchat/common/common/factory/MyThreadFactory.java +++ b/mallchat-common/src/main/java/com/abin/mallchat/common/common/factory/MyThreadFactory.java @@ -4,21 +4,23 @@ import com.abin.mallchat.common.common.handler.GlobalUncaughtExceptionHandler; import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.concurrent.CustomizableThreadFactory; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import java.util.concurrent.ThreadFactory; @Slf4j @AllArgsConstructor -@NoArgsConstructor -public class MyThreadFactory implements ThreadFactory { - - private String name; +public class MyThreadFactory implements ThreadFactory { + private ThreadFactory factory; @Override public Thread newThread(Runnable r) { - Thread thread = new Thread(r); - thread.setUncaughtExceptionHandler(new GlobalUncaughtExceptionHandler(name)); + Thread thread =factory.newThread(r); + thread.setUncaughtExceptionHandler(new GlobalUncaughtExceptionHandler()); + thread.setDaemon(false); + thread.setPriority(5); return thread; } } diff --git a/mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/GlobalUncaughtExceptionHandler.java b/mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/GlobalUncaughtExceptionHandler.java index 319a715..79f4e24 100644 --- a/mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/GlobalUncaughtExceptionHandler.java +++ b/mallchat-common/src/main/java/com/abin/mallchat/common/common/handler/GlobalUncaughtExceptionHandler.java @@ -5,14 +5,12 @@ import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; @Slf4j -@AllArgsConstructor -@NoArgsConstructor public class GlobalUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler { - private String name; + @Override public void uncaughtException(Thread t, Throwable e) { - log.error("线程池名称:[{}],错误信息如下:",name); + log.error("{} task execute is error",t.getName()); e.printStackTrace(); }