zyp hace 2 semanas
padre
commit
d4a6aeb78c

+ 17 - 9
fs-service/src/main/java/com/fs/tenant/service/impl/TenantInfoServiceImpl.java

@@ -102,20 +102,28 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoMapper, TenantI
         } catch (CustomException  e) {
         } catch (CustomException  e) {
             throw e;
             throw e;
         } catch (Exception e) {
         } catch (Exception e) {
+            // 保留原始异常,避免被回滚时的异常覆盖
+            log.error("创建租户失败,tenantCode={}, dbName={}", tenantInfo.getTenantCode(), tenantInfo.getDbName(), e);
+
             try {
             try {
-                // 删除租户数据库
-                TenantUtils.dropDatabase(conn, tenantInfo.getDbName());
+                // 仅在连接可用时尝试回滚数据库
+                if (conn != null) {
+                    TenantUtils.dropDatabase(conn, tenantInfo.getDbName());
+                }
             } catch (Exception ex) {
             } catch (Exception ex) {
-                log.info("删除租户数据库失败:" + ex.getMessage());
-                throw new RuntimeException(ex);
+                log.warn("删除租户数据库失败,tenantCode={}, dbName={}", tenantInfo.getTenantCode(), tenantInfo.getDbName(), ex);
             }
             }
 
 
-            // 删除租户信息
-            LambdaQueryWrapper<TenantInfo> queryWrapper = new LambdaQueryWrapper<>();
-            queryWrapper.eq(TenantInfo::getTenantCode, tenantInfo.getTenantCode());
-            baseMapper.delete(queryWrapper);
+            try {
+                // 删除可能已插入的租户记录
+                LambdaQueryWrapper<TenantInfo> queryWrapper = new LambdaQueryWrapper<>();
+                queryWrapper.eq(TenantInfo::getTenantCode, tenantInfo.getTenantCode());
+                baseMapper.delete(queryWrapper);
+            } catch (Exception ex) {
+                log.warn("删除租户信息失败,tenantCode={}", tenantInfo.getTenantCode(), ex);
+            }
 
 
-            throw new RuntimeException("创建租户失败:" + e.getMessage());
+            throw new RuntimeException("创建租户失败:" + e.getMessage(), e);
         } finally {
         } finally {
             try {
             try {
                 if (conn != null) conn.close();
                 if (conn != null) conn.close();

+ 4 - 1
fs-service/src/main/java/com/fs/utils/TenantUtils.java

@@ -31,7 +31,7 @@ public class TenantUtils {
     public static String buildJdbcUrl(String ip, String dbPort, String dbName) {
     public static String buildJdbcUrl(String ip, String dbPort, String dbName) {
         // 固定前缀 + 固定参数后缀
         // 固定前缀 + 固定参数后缀
         String jdbcPrefix = "jdbc:mysql://";
         String jdbcPrefix = "jdbc:mysql://";
-        String jdbcSuffix = "?useUnicode=true&characterEncoding=utf8mb4&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8";
+        String jdbcSuffix = "?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8";
 
 
         // 拼接:ip:port/dbName
         // 拼接:ip:port/dbName
         String address = ip + ":" + dbPort + "/" + dbName;
         String address = ip + ":" + dbPort + "/" + dbName;
@@ -114,6 +114,9 @@ public class TenantUtils {
      * @throws Exception
      * @throws Exception
      */
      */
     public static void dropDatabase(Connection conn, String dbName) throws Exception {
     public static void dropDatabase(Connection conn, String dbName) throws Exception {
+        if (conn == null) {
+            throw new IllegalArgumentException("数据库连接为空,无法删除数据库");
+        }
         String sql = "DROP DATABASE IF EXISTS " + dbName;
         String sql = "DROP DATABASE IF EXISTS " + dbName;
         Statement stmt = conn.createStatement();
         Statement stmt = conn.createStatement();
         stmt.execute(sql);
         stmt.execute(sql);