问题描述
我将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 (将#修改为@)