您好,欢迎来到锐游网。
搜索
您的当前位置:首页Springboot2+mybatis+druid多数据源事务无效

Springboot2+mybatis+druid多数据源事务无效

来源:锐游网

1、尝试解决问题

在处理事务的时候遇到问题,首先按照网上查询到的资料进行了如下配置:

1) 在启动类上增加@EnableTransactionManagement注解

2)配置文件里增加:spring.transaction.rollback-on-commit-failure=true 配置
3)在service实现类上面增加 @Transactional(rollbackFor = Exception.class) 注解,意思是只要发生异常事务就回滚
4)try catch里 增加TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
 

按照上面几个步骤配置后,事务依旧没有生效,查阅很多资料后,发现可能是多数据源配置影响事务处理

2、解决问题最终方案

在 @Transaction 注解里面可以指定事物管理器,但是需要手动配置mysql事务管理器的bean

如下图,使用druid管理多数据源会有相应的配置文件,以一个配置文件举例,这里是配置数据库相关配置的类,里面定义了事务bean,我们需要使用该事务管理器,只需要在 @Transactional(rollbackFor = Exception.class) 注解中,增加一个value=“事务管理器定义bean名” 指定该事务管理器作为事务管理用途即可。

package com.laibutec.app.config;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
 
import javax.sql.DataSource;
 
@Configuration
public class DataSourcConfig {

 
    @Bean(name = "transactionManager")
    public DataSourceTransactionManager dataSourceTransactionManagerOne(@Qualifier("dataSourceapp") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}

 这里指定事务管理器

@Transactional(value = "transactionManager")

通过以上配置后,终于可以正常使用事务了,在此记录一下。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- ryyc.cn 版权所有 湘ICP备2023022495号-3

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务