【问题标题】:MariaDB connector vs MySQLdb connector - transaction issueMariaDB 连接器与 MySQLdb 连接器 - 事务问题
【发布时间】:2020-08-31 07:33:42
【问题描述】:

我们正在从 MySQL 连接器迁移到 MariaDB 连接器。我们正在使用 Spring 和 Bitronix 事务管理器。

当我们更改连接器时,我们面临着一些交易问题。可能我们找到了根本原因:MySQL和Maria处理join事务的区别,详情请看下面:

我们在项目的几个地方使用了这个注解: @Transactional(propagation = Propagation.REQUIRES_NEW)

以下是实现上的差异:

MySQL 连接器,MysqlXAConnection#isSameRM 实现:

if(xaresinstanceofMysqlXAConnection){
 return this.underlyingConnection.isSameResource(((MysqlXAConnection)xares).underlyingConnection);
}

MariaDB 连接器,org.mariadb.jdbc.MariaXaResource#isSameRM 实现:

//Typicallyusedbytransactionmanagerto"join"transactions.Wedonotsupportjoins,
//soalwaysreturnfalse;
return false;

有人遇到同样的问题吗?如何处理?

我们的实现:

/**
 * Implementation of Audit Log which saves data using JPA in new transaction.
 */
public class JpaAudit implements AuditSPI {

    @Autowired
    private AuditlogRepository auditLogRepository;

    @Override
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void log(AuditLogEntity aAuditObj) {
        auditLogRepository.save(aAuditObj);
    }
}

Propagation.REQUIRES_NEW 更改为Propagation.REQUIRED 会有所帮助,但我认为这对我们来说不是办法。

【问题讨论】:

标签: java mysql mariadb spring-transactions connector


【解决方案1】:

Diego Dupin 报告了您问题中的问题 (CONJ-825) 并更正了 (commit 70c406b2)(感谢他)。

提交的主要部分在src/main/java/org/mariadb/jdbc/MariaXaResource.java

 @Override
  public boolean isSameRM(XAResource xaResource) {
-    // Typically used by transaction manager to "join" transactions. We do not support joins,
-    // so always return false;
+    if (xaResource instanceof MariaXaResource) {
+      MariaXaResource other = (MariaXaResource) xaResource;
+      return connection
+          .getProtocol()
+          .getUrlParser()
+          .equals(other.connection.getProtocol().getUrlParser());
+    }
+    return false;
  }

此修复包含在MariaDB Connector/J 2.7.0.

【讨论】:

  • @Insidel 如果这个答案让你满意,你可以通过点击它左边的复选标记来接受它。
猜你喜欢
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-12
  • 2019-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多