From 1e3476fc18205fd811e71b15b8a5db246c941480 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=80=E6=BA=90=E6=B5=B7=E5=93=A5?= Date: Wed, 23 Aug 2023 15:00:35 +0800 Subject: [PATCH] refactor: optimize FlexSpringTransaction --- .../spring/FlexSpringTransaction.java | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 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 2e117112..644e174a 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 @@ -16,6 +16,8 @@ package com.mybatisflex.spring; import com.mybatisflex.core.datasource.FlexDataSource; +import com.mybatisflex.core.transaction.TransactionContext; +import com.mybatisflex.core.util.StringUtil; import org.apache.ibatis.transaction.Transaction; import java.sql.Connection; @@ -30,6 +32,9 @@ import java.sql.SQLException; public class FlexSpringTransaction implements Transaction { private final FlexDataSource dataSource; + private Boolean isConnectionTransactional; + private Boolean autoCommit; + private Connection connection; public FlexSpringTransaction(FlexDataSource dataSource) { this.dataSource = dataSource; @@ -37,22 +42,41 @@ public class FlexSpringTransaction implements Transaction { @Override public Connection getConnection() throws SQLException { - return dataSource.getConnection(); + if (isConnectionTransactional == null) { + connection = dataSource.getConnection(); + isConnectionTransactional = StringUtil.isNotBlank(TransactionContext.getXID()); + autoCommit = connection.getAutoCommit(); + return connection; + } + // 非事务 + else if (!isConnectionTransactional) { + return connection; + } + // 在事务中 + else { + return dataSource.getConnection(); + } } @Override public void commit() throws SQLException { - getConnection().commit(); + if (this.connection != null && !this.isConnectionTransactional && !this.autoCommit) { + this.connection.commit(); + } } @Override public void rollback() throws SQLException { - getConnection().rollback(); + if (this.connection != null && !this.isConnectionTransactional && !this.autoCommit) { + this.connection.rollback(); + } } @Override public void close() throws SQLException { - getConnection().close(); + if (this.connection != null && !this.isConnectionTransactional) { + connection.close(); + } } @Override