No qualifying bean of type 'org.springframework.transaction.PlatformTransactionManager' available

問題描述

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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章