在我的项目中,我使用 Spring 和 mybatis,并通过 mybatis-spring 将它们粘合在一起。我在我的服务层周围使用 Spring 的声明性 @Transactional 注释,它调用 mybatis 映射器。
我希望在没有 Activity 事务的情况下不能调用我的映射器方法。相反,它们静静地在无事务上下文中运行(或者它们正在启动新事务)。
有没有办法禁用此行为并使其更像强制传播级别?
最佳答案
最简单的方法是创建自定义 TransactionFactory
,它将检查是否存在 Activity 事务,否则抛出异常。
class MandatoryTransactionSpringManagedTransactionFactory extends SpringManagedTransactionFactory {
public Transaction newTransaction(DataSource dataSource, TransactionIsolationLevel level, boolean autoCommit) {
if (!TransactionSynchronizationManager.isActualTransactionActive()) {
throw new IllegalTransactionStateException(
"No existing transaction found during mapper invocation");
}
return super.newTransaction(dataSource);
} }
它应该用于配置org.mybatis.spring.SqlSessionFactoryBean
关于java - 如何让mybatis需要事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26472344/