当前使用版本(必填,否则不予处理)
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
批量处理别用它这个版本,自己写一个吧