解决SpringBoot多数据源使用@Transactional进行事务处理时,找到多个bean问题

报错如下

org.springframework.beans.factory.NoUniqueBeanDefinitionException: 
No qualifying bean of type 'org.springframework.transaction.PlatformTransactionManager' available: 
expected single matching bean but found X: transactionManager,X,X

解决方案

使用@Transactional进行事务处理,因为存在多个数据源,如果不直接指定,程序就不知道使用哪一个事务处理器,所以需要在切换数据源时,指定事务处理器。

  1. 在继承AbstractRoutingDataSource类中添加以下代码
/**
     * 事务配置
     * 支持注解
     * @param multipleDataSource
     * @return
     */
    @Bean
    public DataSourceTransactionManager transactionManager(MultipleDataSource multipleDataSource) {
        return new DataSourceTransactionManager(multipleDataSource);
    }

2.方法指定事务管理器

  @Transactional(transactionManager = "transactionManager")
    public int delKcById(String objId) {
        int count = 0;
        //删除1
        kcMapper.deleteById(objId);
        //删除2
        count +=sjjbxxMapper.deleteById(objId);
        return count;
    }

总结

具体在哪里加入指定事务处理代码,需要根据实际情况而定。

你可能感兴趣的:(问题记录,spring,boot,java,mybatis)