Просмотр исходного кода

增加全局堆栈异常捕获 推送到飞书

leon 4 лет назад
Родитель
Сommit
b8304e9c64

+ 23 - 0
src/main/java/com/mokamrp/privates/config/ApiPanic.java

@@ -0,0 +1,23 @@
+package com.mokamrp.privates.config;
+
+import com.mokamrp.privates.utils.Cmd;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+
+@ControllerAdvice
+public class ApiPanic {
+    private final String feishu = "https://open.feishu.cn/open-apis/bot/v2/hook/538d8993-e23a-4836-863c-05515b41160e";
+    @Value("${spring.profiles.active}")
+    private String env;
+
+    @ExceptionHandler(value = Exception.class)
+    public String exceptionHandler(Exception e) {
+        if (env.equals("prod")) {
+            //.正式环境捕获API异常 推送到飞书
+            Cmd.sendFeishuMsg(feishu, "[moka-private]:api panic " + e.getMessage());
+        }
+        return e.getMessage();
+    }
+}

+ 19 - 0
src/main/java/com/mokamrp/privates/config/ScheduledPanic.java

@@ -0,0 +1,19 @@
+package com.mokamrp.privates.config;
+
+import com.mokamrp.privates.utils.Cmd;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ErrorHandler;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+
+import javax.annotation.Priority;
+import java.sql.SQLSyntaxErrorException;
+
+public class ScheduledPanic implements ErrorHandler {
+    private final String feishu = "https://open.feishu.cn/open-apis/bot/v2/hook/76b291fd-a9c1-4285-a3d8-7d7d8ed4ef73";
+
+    public void handleError(Throwable throwable) {
+        Cmd.sendFeishuMsg(feishu, "[moka-private]:cronjob panic " + throwable.getMessage());
+    }
+}
+

+ 16 - 0
src/main/java/com/mokamrp/privates/config/TaskConfig.java

@@ -1,6 +1,11 @@
 package com.mokamrp.privates.config;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.context.event.EventPublishingRunListener;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Conditional;
 import org.springframework.context.annotation.Configuration;
@@ -8,16 +13,25 @@ import org.springframework.scheduling.TaskScheduler;
 import org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
 import org.springframework.stereotype.Component;
+import org.springframework.util.ErrorHandler;
 
 @Configuration
 @Component
 public class TaskConfig {
+    @Value("${spring.profiles.active}")
+    private String env;
 
     @Bean
     public TaskScheduler taskScheduler() {
+
         ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
         // 设置scheduler执行线程为10个
+
         scheduler.setPoolSize(10);
+        if (env.equals("prod")){
+            //.正式环境捕获定时任务异常 推送到飞书
+            scheduler.setErrorHandler(new ScheduledPanic());
+        }
         return scheduler;
     }
 
@@ -26,4 +40,6 @@ public class TaskConfig {
     public ScheduledAnnotationBeanPostProcessor processor() {
         return new ScheduledAnnotationBeanPostProcessor();
     }
+
 }
+