依赖

        <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.2</version></dependency>

yml配置

  datasource:#动态数据源配置dynamic:#主数据源,默认启用primary: masterdatasource:#数据源1master:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/maruko?useUnicode=true&characterEncoding=utf-8&useSSL=falseusername: rootpassword: marukoinitial-size: 5max-active: 10min-idle: 10max-wait: 20#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒time-between-eviction-runs-millis: 60000#数据源2slave:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/maruko2?useUnicode=true&characterEncoding=utf-8&useSSL=falseusername: rootpassword: marukoinitial-size: 5max-active: 10min-idle: 10max-wait: 20#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒time-between-eviction-runs-millis: 60000

实现层代码

实现层a方法:

    @Override@DSTransactional
//    @Transactional(rollbackFor = Exception.class)public void dbTest() {Blog blog = new Blog(7L, "blog", new Date(), 1, 0, false);baseMapper.insert(blog);
//        Maruko maruko = new Maruko(1L, "zjf", 18);
//        iMarukoService.save(maruko);Maruko maruko2 = new Maruko(3L, "zjf", 18);iMarukoService.save(maruko2);}

实现层b方法:

@Service
@DS(DbEnum.SLAVE)
public class MarukoServiceImpl extends ServiceImpl<MarukoMapper, Maruko> implements IMarukoService {@Override
//    @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)public boolean save(Maruko maruko) {return super.save(maruko);}
}

失效问题

使用动态数据源(@DS)时,@Transactional使用可能会照成@DS失效。
dbTest()方法配置了@Transactional(rollbackFor = Exception.class),save()方法没配置事务,或者配置@Transactional(rollbackFor = Exception.class),会报错save()方法里面的表找不到,其原因感觉应该是aop代理创建事务,没有切换,导致还是使用的默认数据源。解决方法有:第一种去掉事务(不建议),第二种给save()添加事务传播属性@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class),第三种save方法不用添加事务,主方法用@DSTransactional注解。

@ds实现多数据源切换及解决事务失效问题相关推荐

  1. springMVC重复扫描bean导致声明式事务失效

    文章目录 1 配置文件 1.1 加载spring容器配置 1.2 加载springMvc容器配置 1.3 spring声明式事务配置 2 声明式事务失效 2.1 事务失效的原因 2.2 解决方案 3 ...

  2. 事务失效了?别怕,这里有四种方式可以让他生效起来

    目录 一.背景 二.事务失效的原因 三.事务失效的真正原因 四.事务失效场景复现 五.事务失效的四种解决方案 六.留个思考题,和朋友探讨时留下的 一.背景 操作一张表或者多张表时,多次进行更新操作,确 ...

  3. spring框架多数据源切换问题的解决

    Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样可以有效提高系统的水平伸缩性.而这样的方案就会不同于常见的单一数据实例的方案,这就要程序在运行时根据当时 ...

  4. springboot多数据源动态切换,事务下切换数据源(非分布式事务)

    目录 1.业务场景 2.主要思路 3.加载默认数据源 4.多数据源规则配置 5.程序启动加载子公司数据源 6.自定义事务注解 7.程序中调用 1.业务场景 因为业务业务需求,需要把基础数据与子公司业务 ...

  5. Spring(AbstractRoutingDataSource)实现动态数据源切换

    参考:http://linhongyu.blog.51cto.com/6373370/1615895 一.前言 近期一项目A需实现数据同步到另一项目B数据库中,在不改变B项目的情况下,只好选择项目A中 ...

  6. Spring(AbstractRoutingDataSource)实现动态数据源切换--转载

    原始出处:http://linhongyu.blog.51cto.com/6373370/1615895 一.前言 近期一项目A需实现数据同步到另一项目B数据库中,在不改变B项目的情况下,只好选择项目 ...

  7. 【原】继承AbstractRoutingDataSource再通过AOP实现动态数据源切换

    关于AbstractRoutingDataSource动态切换数据源是我在研究某开源项目时候才注意到的,大概就看懂了Spring AOP切面这里,根据作者的意思是通过继承这个抽象类可以实现数据源的动态 ...

  8. spring boot使用AbstractRoutingDataSource实现动态数据源切换

    一.AbstractRoutingDataSource Spring boot提供了AbstractRoutingDataSource 根据用户定义的规则选择当前的数据源,这样我们可以在执行查询之前, ...

  9. spring boot微服务架构mybatis多数据源切换

    1,先看个目录结构图 可以看到,我把要设置的配置文件都放在了config文件夹下面 2,Application.java是程序启动项,里面必须设置 3,application.properties是多 ...

最新文章

  1. ​DeepMind Nature发文:AI首次实现数学领域的重大进展
  2. 《深入理解Android:Telephony原理剖析与最佳实践》一1.3 Android Telephony框架结构...
  3. 使用FoundationDB高效地将SQL数据映射到NoSQL存储系统中
  4. c++连连看游戏_用Python玩连连看是什么效果?
  5. python3最新版本-Python3第三方组件最新版本追踪实现
  6. Linux内核同步机制之completion
  7. python操作redis集群_python 连接管理作redis集群
  8. 《Java EE 7精粹》—— 第3章 JSF 3.1 Facelets
  9. html5 a-z字母排序,Js按A-Z排序通讯录(中文、英文、特殊字符)
  10. 2017-2018-2 20155315《网络对抗技术》Exp3:免杀原理与实践
  11. 蓝桥杯 BASIC-14 基础练习 时间转换
  12. 常用Quartz cron表达式例子
  13. matlab 张正友工具箱,TOOLBOX_calib0 张正友的标定工具箱,直接运行会有错误,这是经过修改的 首先 _gui,确 matlab 238万源代码下载- www.pudn.com...
  14. 蓝牙sbc怎么解决_简单一文,为你详细解析手机蓝牙的音质之谜
  15. PXE网络启动 windows PE (使用微软官方工具)
  16. msp430f149最小核心板和bsl下载器连线
  17. ESP8266天猫精灵接入流程
  18. 关于海报和插画的区别
  19. 【Oauth2】SpringBoot整合Oauth2实现认证授权
  20. 冯 诺依曼与计算机的故事,计算机之父冯·诺依曼的故事

热门文章

  1. 认识System Center之一
  2. ARM Cortex-M 调试器 - 基础知识
  3. ProxySQL 配置详解及读写分离(+GTID)等功能说明 (完整篇)2
  4. PPASR流式与非流式语音识别
  5. 朝花夕拾——动态规划
  6. 广色域图片Android,广色域手机很厉害?其实安卓手机屏幕的色彩问题一
  7. python爬取微博热搜显示到折线图_Python爬取新浪微博热搜榜-Go语言中文社区
  8. 方舟服务器建家位置,方舟生存进化新手建家图文攻略 方舟生存进化在哪建家比较好-游侠网...
  9. 计算机硬盘配置参数错误怎么办,电脑提示移动硬盘参数错误的解决方法
  10. Arduino时钟显示