Spring Boot多数据源事务@DSTransactional的使用详解

 更新时间:2023年06月09日 09:34:00   作者:可乐汉堡cola  
本文主要介绍了Spring Boot多数据源事务@DSTransactional的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

项目场景:

Spring Boot集成com.baomidou,引入dynamic-datasource依赖,实现多数据源,这里说下事务问题:

1、一个方法中使用同一个数据源;

2、一个方法中使用了多个数据源;

解决方案: 

这里把dao、service列出来

1、dao层

package com.test.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
//数据源1
@DS("db1")
@Mapper
public interface Test1Dao {
    @Update("update test1 set name = #{name} where id = #{id}")
    void updateById(@Param("id")Integer id, @Param("name")String name);
}
package com.test.mapper;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.test.datasources.DataSourceNames;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Update;
//数据源2
@DS(“db2”)
@Mapper
public interface Test2Dao {
    @Update("update test2 set name = #{name} where id = #{id}")
    void updateById(@Param("id")Integer id, @Param("name")String name);
}

2、service层 

package com.test.service;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.baomidou.dynamic.datasource.annotation.DSTransactional;
import com.test.mapper.Test1Dao;
import com.test.mapper.Test2Dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class TestService {
    @Autowired
    private Test1Dao test1Dao;
    @Autowired
    private Test2Dao test2Dao;
    /**
     * 同一个数据源中的事务,都是数据源2
     * 这里用的是spring的事务注解Transactional
     * 这里必须加上注解多数据源注解@DS("db2"),否则使用的是默认数据源
     */
    @DS("db2")
    @Transactional
    public void theSame() {
        test2Dao.updateById(2,"第一次修改");
        test2Dao.updateById(2,"第二次修改");
        //这里报错回滚
        int i = 1/0;
    }
    /**
     * 多数据源中的事务,同时使用数据源1、2
     * 如果这里用spring的事务注解Transactional,那么使用的是默认数据源
     * 这里不需要加上注解@DS
     */
    @DSTransactional
    public void notAlike() {
        test1Dao.updateById(1,"第一次修改");
        test2Dao.updateById(2,"第二次修改");
        //这里报错回滚
        int i = 1/0;
    }
}

到此这篇关于Spring Boot多数据源事务@DSTransactional的使用详解的文章就介绍到这了,更多相关SpringBoot @DSTransactional内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 容器环境的JVM内存设置实践记录

    容器环境的JVM内存设置实践记录

    Docker和K8S的兴起,很多服务已经运行在容器环境,对于java程序,JVM设置是一个重要的环节,这里总结下我们项目里的最佳实践,对容器环境的JVM内存相关知识感兴趣的朋友一起看看吧
    2022-03-03
  • Java报错:ClassCastException问题解决方法

    Java报错:ClassCastException问题解决方法

    异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的,下面这篇文章主要给大家介绍了关于Java报错:ClassCastException问题解决方法,需要的朋友可以参考下
    2024-07-07
  • SpringBoot整合MybatisPlus的基本应用详解

    SpringBoot整合MybatisPlus的基本应用详解

    MyBatis-Plus (简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为 简化开发、提高效率而生,本文将给大家介绍一下SpringBoot整合MybatisPlus的基本应用,需要的朋友可以参考下
    2024-05-05
  • JAVA设计模式---单例模式你知道吗

    JAVA设计模式---单例模式你知道吗

    这篇文章主要给大家介绍了关于Java单例模式,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2021-09-09
  • java实现文件复制上传操作

    java实现文件复制上传操作

    这篇文章主要为大家详细介绍了java实现文件复制上传操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • SpringBoot对接小程序微信支付的实现

    SpringBoot对接小程序微信支付的实现

    本文主要介绍了SpringBoot对接小程序微信支付的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧<BR>
    2023-09-09
  • Java数据结构之链表详解

    Java数据结构之链表详解

    本篇文章我们将讲解一种新型的数据结构—链表,链表是一种使用广泛的通用数据结构,它可以用来作为实现栈,队列等数据结构的基础.文中有非常详细的介绍,需要的朋友可以参考下
    2021-05-05
  • Java多线程基础

    Java多线程基础

    这篇文章主要介绍Java多线程基础,线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,多线程指在单个程序中可以同时运行多个不同的线程执行不同的任务,下面来学习具体的详细内容
    2021-10-10
  • springboot文件上传时maxPostSize设置大小失效问题及解决

    springboot文件上传时maxPostSize设置大小失效问题及解决

    这篇文章主要介绍了springboot文件上传时maxPostSize设置大小失效问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Mybatis-Plus适配联合主键实现方式

    Mybatis-Plus适配联合主键实现方式

    本文介绍了如何使用Mybatis-Plus(MP)和Mybatis-Plus-Plus(MPP)工具来处理联合主键的问题,并详细描述了整合过程、遇到的问题及解决方式
    2025-11-11

最新评论