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

v3.3.2

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

因为启用了 Kafka 声明式事物及同时有使用R2DBC,而ServiceImpl 的几个更新方法均添加了 @Transactional 注解。造成 @Transactional 找到多个物事管理器而不能决定使用哪一个。外部函数已经指定了事物管理器,但从报错来看被调用的 saveBatch 函数并未继承外部函数的事物管理器 建议在 IService 接口及 ServiceImpl 实现类上去掉所有 @Transactional 注解,由用户在调用时选择是否添加并指明具体使用哪个事物管理器。如:

    @Transactional(transactionManager = "jdbcTransactionManager", rollbackFor = Exception.class)
    public int saveBill(StatementBillMainDO billMainDO, List<StatementBillDO> billDOList) {
        if (statementBillMainMapper.insert(billMainDO) != 1) {
            throw new DataException(String.format("账单插入失败:%s", billMainDO.toString()));
        }
        statementBillDBService.saveBatch(billDOList, 1000);
        return 1 + billDOList.size();
    }

报错信息

19:49:26.483 ERROR [data-process-1] c.i.d.p.service.KafkaConsumerService - Consumer failure: No qualifying bean of type 'org.springframework.transaction.TransactionManager' available: expected single matching bean but found 3: jdbcTransactionManager,kafkaTransactionManager,connectionFactoryTransactionManager, restart in 1 minute.
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.transaction.TransactionManager' available: expected single matching bean but found 3: jdbcTransactionManager,kafkaTransactionManager,connectionFactoryTransactionManager
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1197)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveBean(DefaultListableBeanFactory.java:420)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:350)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:343)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.determineTransactionManager(TransactionAspectSupport.java:481)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:336)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:118)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)
    at com.sun.proxy.$Proxy78.saveBatch(Unknown Source)
    at com.iciyun.data.di.vehicle.insurance.service.StatementBillService.saveBill(StatementBillService.java:26)
    at com.iciyun.data.di.vehicle.insurance.service.StatementBillService$$FastClassBySpringCGLIB$$4d5d9311.invoke(<generated>)

Comment From: miemieYaho

这种你就自己cv一份自己用

Comment From: yangbajing

这种你就自己cv一份自己用

我现在就是 Copy 来用的,可以考虑在文档上加个说明。

Comment From: Uniman-Su

批量处理别用它这个版本,自己写一个吧