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

add 增加 Mybatis 全局异常处理 开启多数据源切换 严格模式 找不到数据源报错

疯狂的狮子Li 4 лет назад
Родитель
Сommit
71ae01a546

+ 2 - 0
config/dev/datasource.yml

@@ -23,6 +23,8 @@ spring:
       p6spy: true
       # 开启seata代理,开启后默认每个数据源都代理,如果某个不需要代理可单独关闭
       seata: true
+      # 严格模式 匹配不到数据源则报错
+      strict: true
       druid:
         initial-size: 5
         min-idle: 5

+ 16 - 0
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/handler/GlobalExceptionHandler.java

@@ -10,6 +10,7 @@ import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.exception.DemoModeException;
 import com.ruoyi.common.core.exception.ServiceException;
 import lombok.extern.slf4j.Slf4j;
+import org.mybatis.spring.MyBatisSystemException;
 import org.springframework.dao.DuplicateKeyException;
 import org.springframework.validation.BindException;
 import org.springframework.web.HttpRequestMethodNotSupportedException;
@@ -89,6 +90,21 @@ public class GlobalExceptionHandler {
         return R.fail("数据库中已存在该记录,请联系管理员确认");
     }
 
+    /**
+     * Mybatis系统异常 通用处理
+     */
+    @ExceptionHandler(MyBatisSystemException.class)
+    public R<Void> handleCannotFindDataSourceException(MyBatisSystemException e, HttpServletRequest request) {
+        String requestURI = request.getRequestURI();
+        String message = e.getMessage();
+        if (message.contains("CannotFindDataSourceException")) {
+            log.error("请求地址'{}', 未找到数据源", requestURI);
+            return R.fail("未找到数据源,请联系管理员确认");
+        }
+        log.error("请求地址'{}', Mybatis系统异常", requestURI, e);
+        return R.fail(message);
+    }
+
     /**
      * 业务异常
      */