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 6aa392f31014ba8df5e5ff11d9e2f9b1eb8c8e5d..1e0d754dc3da335728bb9bd932638b96d7a76ec2 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(); }