当前使用版本(必填,否则不予处理)

com.baomidou mybatis-plus 3.5.2

该问题是如何引起的?(确定最新版也有问题再提!!!)

我定义了 多个事务管理器 gameTransactionManager, goodsTransactionManager, xxxTransactionManager, 当我在外面的方法也加上 @Transactional(rollbackFor = Exception.class, value = "gameTransactionManager") 那么 批量保存的 事务就找不到具体事务管理器

@Transactional(rollbackFor = Exception.class) @Override public boolean saveBatch(Collection entityList, int batchSize) { String sqlStatement = getSqlStatement(SqlMethod.INSERT_ONE); return executeBatch(entityList, batchSize, (sqlSession, entity) -> sqlSession.insert(sqlStatement, entity)); }

重现步骤(如果有就写完整)

个人建议

@Transactional(rollbackFor = Exception.class) 这个注解不应该加到框架里面,应该由用户自己去定义,或者开放设置,提供调用这定义 @Transactional 的配置

报错信息

org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.transaction.TransactionManager' available: expected single matching bean but found 4: transactionManager,gameTransactionManager,goodsTransactionManager at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1273) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveBean(DefaultListableBeanFactory.java:494) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:349) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:342) at org.springframework.transaction.interceptor.TransactionAspectSupport.determineTransactionManager(TransactionAspectSupport.java:503) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:342) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763) at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708)

Comment From: ansel-peng

这个跟mybatis没什么关系,如果需要,可以手动事务

@SpringBootTest
public class TransactionTest {

  @Autowired
  private DataSourceTransactionManager dataSourceTransactionManager;

  @Autowired
  private TransactionDefinition transactionDefinition;

  @Autowired
  private UserMapper userMapper;

  @Test
  public void transactionTest() {
    TransactionStatus transaction = dataSourceTransactionManager.getTransaction(
        transactionDefinition);
    User user = new User();
    user.setAge(10);
    user.setName("ansel");
    userMapper.insert(user);
    dataSourceTransactionManager.commit(transaction);
  }
}

Comment From: qmdx

up

Comment From: elcnu986

这个跟mybatis没什么关系,如果需要,可以手动事务

```java @SpringBootTest public class TransactionTest {

@Autowired private DataSourceTransactionManager dataSourceTransactionManager;

@Autowired private TransactionDefinition transactionDefinition;

@Autowired private UserMapper userMapper;

@Test public void transactionTest() { TransactionStatus transaction = dataSourceTransactionManager.getTransaction( transactionDefinition); User user = new User(); user.setAge(10); user.setName("ansel"); userMapper.insert(user); dataSourceTransactionManager.commit(transaction); } } ```

多数据源可以这样用吗?