问题描述
Spring Boot配置两个数据源和和两个相关的事务管理器,添加@Transactional注解报错
org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.transaction.PlatformTransactionManager' available: expected single matching bean but found 2: capabilityDataSourceTransactionManager,tmsTransactionManager
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1039)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:339)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:334)
at org.springframework.transaction.interceptor.TransactionAspectSupport.determineTransactionManager(TransactionAspectSupport.java:394)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:284)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)
at com.sto.transport.capability.driver.biz.service.impl.StoDriverServiceImpl$$EnhancerBySpringCGLIB$$263e3b9b.saveStoDriverVOOut(<generated>)
at com.sto.transport.capability.driver.controller.StoDriverController.saveDriverOut(StoDriverController.java:124)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
解决方案
指定事务管理器
@Override
@Transactional(transactionManager = "capabilityDataSourceTransactionManager")
public StoDriverVO saveStoDriverVO(StoDriverDTO dto) {
// 新增司机信息
StoDriverDO stoDriverDO = BeanConvert.bean2Object(dto, StoDriverDO.class);
stoDriverDO = stoDriverDOService.save(stoDriverDO);
return BeanConvert.bean2Object(stoDriverDO, StoDriverVO.class);
}