From ce41bce9180f60363bf86ddf5e12f19b1e534958 Mon Sep 17 00:00:00 2001
From: FUNKYE <364176773@qq.com>
Date: Wed, 28 Oct 2020 10:44:48 +0800
Subject: [PATCH] bugfix: fix repeated commit when autocommit is false (#3040)

---
 .../main/java/io/seata/rm/datasource/ConnectionProxy.java    | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java b/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java
index 6aa392f31..1e0d754dc 100644
--- a/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java
+++ b/rm-datasource/src/main/java/io/seata/rm/datasource/ConnectionProxy.java
@@ -185,6 +185,9 @@ public class ConnectionProxy extends AbstractConnectionProxy {
                 return null;
             });
         } catch (SQLException e) {
+            if (targetConnection != null && !getAutoCommit()) {
+                rollback();
+            }
             throw e;
         } catch (Exception e) {
             throw new SQLException(e);
@@ -251,7 +254,7 @@ public class ConnectionProxy extends AbstractConnectionProxy {
 
     @Override
     public void setAutoCommit(boolean autoCommit) throws SQLException {
-        if (autoCommit && !getAutoCommit()) {
+        if ((context.inGlobalTransaction() || context.isGlobalLockRequire()) && autoCommit && !getAutoCommit()) {
             // change autocommit from false to true, we should commit() first according to JDBC spec.
             doCommit();
         }
-- 
GitLab