From cf79c27ab72d8ec48c9b8a2e7d2494ebe0dd6ff5 Mon Sep 17 00:00:00 2001 From: life <13122192336@163.com> Date: Fri, 4 Aug 2023 16:44:11 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=93=E5=AD=98=E6=95=B0=E6=8D=AE=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=EF=BC=8C=E5=A6=82=E6=9E=9C=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E7=BC=BA=E5=B0=91=E5=8F=AF=E8=83=BD=E4=BC=9A?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E8=8E=B7=E5=8F=96=E4=B8=8D=E5=88=B0=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E8=BF=9E=E6=8E=A5=E6=97=A0=E9=99=90=E6=AD=BB?= =?UTF-8?q?=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spring/FlexSpringTransaction.java | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/mybatis-flex-spring/src/main/java/com/mybatisflex/spring/FlexSpringTransaction.java b/mybatis-flex-spring/src/main/java/com/mybatisflex/spring/FlexSpringTransaction.java index 2dd41369..cb3d7719 100644 --- a/mybatis-flex-spring/src/main/java/com/mybatisflex/spring/FlexSpringTransaction.java +++ b/mybatis-flex-spring/src/main/java/com/mybatisflex/spring/FlexSpringTransaction.java @@ -15,13 +15,21 @@ */ package com.mybatisflex.spring; +import com.mybatisflex.core.datasource.DataSourceKey; import com.mybatisflex.core.datasource.FlexDataSource; import com.mybatisflex.core.transaction.TransactionContext; +import com.mybatisflex.core.util.StringUtil; import java.sql.Connection; import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import javax.sql.DataSource; import org.apache.ibatis.session.TransactionIsolationLevel; import org.apache.ibatis.transaction.Transaction; +import org.mybatis.logging.Logger; +import org.mybatis.logging.LoggerFactory; +import org.mybatis.spring.transaction.SpringManagedTransaction; /** * spring事务支持,解决issusehttps://gitee.com/mybatis-flex/mybatis-flex/issues/I7HJ4J @@ -29,8 +37,11 @@ import org.apache.ibatis.transaction.Transaction; */ public class FlexSpringTransaction implements Transaction { + private static final Logger LOGGER = LoggerFactory.getLogger(FlexSpringTransaction.class); DataSource dataSource; + Map connectionMap =new HashMap<>(); + boolean isTransaction =false; TransactionIsolationLevel level; @@ -47,16 +58,23 @@ public class FlexSpringTransaction implements Transaction { @Override public Connection getConnection() throws SQLException { if (dataSource instanceof FlexDataSource) { - this.autoCommit = this.dataSource.getConnection().getAutoCommit(); + String dataSourceKey = DataSourceKey.get(); + if (StringUtil.isBlank(dataSourceKey)) { + dataSourceKey = ((FlexDataSource) dataSource).getDefaultDataSourceKey(); + } + Connection connection = connectionMap.get(dataSourceKey); + if (connection == null){ + connection = this.dataSource.getConnection(); + connectionMap.put(dataSourceKey,connection); + } + this.autoCommit = connection.getAutoCommit(); if ( TransactionContext.getXID() != null){ isTransaction = true; } - return dataSource.getConnection(); + return connection; }else{ - throw new SQLException("The datasource must be FlextDataSource"); + throw new SQLException("The datasource must be FlexDataSource"); } - - } @Override @@ -64,7 +82,6 @@ public class FlexSpringTransaction implements Transaction { if (!isTransaction && !autoCommit){ getConnection().commit(); } - } @Override