MyBatis-Spring ManagedTransactionFactory异常

问题描述

我将Mybatis-Spring与jta-transaction-manager一起使用,但得到“ Sqlsessionfactory必须使用springmanagedtransactionfactory才能使用Spring事务同步”异常。我查看了Mybatis-Spring源代码,发现MybatisExceptionTranslator> initExceptionTranslator函数使用spring.jdbc.datasource.DataSourceUtils> doGetConnection获取sql错误代码并将数据源绑定到事务同步管理器,然后如果您再次在当前线程中使用此数据源,请获取

Mybatis / spring-> MyBatisExceptionTranslator.java> initExceptionTranslator()

private synchronized void initExceptionTranslator() {
  if(this.exceptionTranslator == null) {
     this.exceptionTranslator = new SQLErrorCodesExceptionTranslator(this.datasource);
  }
}

mybatis / spring-> SqlSessionUtils.java> registerSessionHolder

if (TransactionSynchronizationManager.getResource(environment.getDataSource()) == null) {
     LOGGER.debug(() -> "SqlSession [" + session
                  + "] was not registered for synchronization because DataSource is not transactional");
} else {
    throw new TransientDataAccessResourceException(
                  "SqlSessionFactory must be using a SpringManagedTransactionFactory in order to use Spring transaction synchronization");
}

Mybatis数据源交易工厂:

<property name="transactionFactory">
      <bean class="org.apache.ibatis.transaction.managed.ManagedTransactionFactory" />
</property> 

我的Spring数据配置:

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)