@ds实现多数据源切换及解决事务失效问题_@ds 事务-程序员宅基地

技术标签: spring boot  java  mysql  

依赖

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

yml配置

  datasource:
    #动态数据源配置
    dynamic:
      #主数据源,默认启用
      primary: master
      datasource:
        #数据源1
        master:
          driver-class-name: com.mysql.jdbc.Driver
          url: jdbc:mysql://127.0.0.1:3306/maruko?useUnicode=true&characterEncoding=utf-8&useSSL=false
          username: root
          password: maruko
          initial-size: 5
          max-active: 10
          min-idle: 10
          max-wait: 20
          #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
          time-between-eviction-runs-millis: 60000
        #数据源2
        slave:
          driver-class-name: com.mysql.jdbc.Driver
          url: jdbc:mysql://127.0.0.1:3306/maruko2?useUnicode=true&characterEncoding=utf-8&useSSL=false
          username: root
          password: maruko
          initial-size: 5
          max-active: 10
          min-idle: 10
          max-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注解。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_35705176/article/details/128301204

智能推荐

STM32CubeMX学习笔记一 《安装软件》_stm32cubemx software v6.1.2-程序员宅基地

文章浏览阅读1.1k次,点赞4次,收藏3次。STM32CubeMX学习笔记一前言学如逆水行舟不进则退,唉!多想学一个技能便可以走遍天下。哈哈!打扰了,我还没睡醒。前段时间花费了一些精力学习的STM32CubeMX 4.27.0版本软件,现如今它却去了趟美容院,给自己更新了,多无奈呀!对我们这些上了年龄的工科男又多了个挑战。之前在项目中用其搭建了一个项目框架,在添加芯片的一些内部驱动那是相当的便捷,图形化对于代码的编写简单化了许多,钩钩选选便可以建一个工程。废话不多说,下面来从零开始学习这个,本博主只为记录一下笔记便于日后回忆,毕竟上了年纪了,有兴_stm32cubemx software v6.1.2

k8s编排nacos standalone模式踩坑实录_pod.alpha.kubernetes.io/initialized: "true-程序员宅基地

文章浏览阅读3.4k次,点赞3次,收藏4次。本人最近用k8s编排nacos,网上大多是用cluster模式启动nacos,而用cluster启动nacos一定要用mysql持久化,而如果用k8s编排nacos时,连数据库比较麻烦,所以本人就想用standalone不带数据库连的方式,用k8s编排nacos。可用的基于standaline的编排文件如下。apiVersion: apps/v1kind: StatefulSetmetadata: name: nacosspec: serviceName: nacos repli_pod.alpha.kubernetes.io/initialized: "true

grep 查询指定时间段内的日志_grep 取时间段-程序员宅基地

文章浏览阅读2.6w次,点赞3次,收藏15次。查询指定时间段内的日志grep 查询的内容 sed -n '/开始时间/,/结束时间/' 文件名eg:grep 成功 sed -n '/2018-09-06 16:00:00/,/2018-09-06 17:00:00/p' all.2018-09-06.log 之前用的一直sed -n 怎么不成功呢。查不到东西呢,显示的还是所有的日志呢,原来自己少了p,切记哦,不要忘了哦..._grep 取时间段

python如何将三维图变成动态_python图片转矩阵python中读取图片的方式,以及将图片以三维数组的形式输出...-程序员宅基地

文章浏览阅读231次。1、图像转换为矩阵matrix = numpy.asarray(image)2、矩阵转换为图像image = Image.fromarray(matrix)近期做个小项目需要用到python读取图片,自己整理了一下两种读取图片的方式,其中一种用到了TensorFlow,(TensorFlow是基于python3 的)。代码及运行结果如下所示:import numpy as npfrom PIL i..._img = image.fromarray(martix)

ArcGIS Editor for OSM插件大合集-程序员宅基地

文章浏览阅读4.8k次。概述开放街道地图是一个建构自由内容之网上地图协作计划,目标是创造一个内容自由且能让所有人编辑的世界地图,并且让一般的移动设备有方便的导航方案。之前有给大家介绍过OpenStreetMap的QGIS下载插件,详见《QGIS中的OpenStreetMap矢量下载插件QuickOSM(附插件下载)》一文,这里给大家介绍一下OpenStreetMap在ArcGIS中使用的插件ArcGIS Editor for OSM,希望能对大家有所帮助。这里整理了ArcGIS Editor for OSM从10.0到_arcgis editor for osm

MFC程序框架的剖析 .-程序员宅基地

文章浏览阅读415次。1,寻找WinMain人口:在安装目录下找到MFC文件夹下的SRC文件夹,SRC下是MFC源代码。路径:MFC|SRC|APPMODUL.CPP:_tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow){ // call shared/exported Wi

随便推点

mac下MySQL的安装配置_mysql mac-程序员宅基地

文章浏览阅读221次。1.下载dmg形式 https://dev.mysql.com/downloads/mysql/2.双击直接安装,傻瓜式安装,一直继续,在最后会提示输入八位密码,记住密码,是连接数据库要输入的密码。3.安装完成后,点击系统偏好设置,选择MySQL,开启服务4.想在终端直接使用mysql指令,还需配置路径,打开.bash_profile 文件,添加PATH=$PATH:/u..._mysql mac

SpringBoot引入Redis报org.springframework.data.redis.core.RedisTemplate类找不到错误-程序员宅基地

文章浏览阅读8.3w次,点赞10次,收藏11次。今日在学习Redis时,发现导入RedisTemplate和RedisCacheManager失败,反复思索,终于找到解决办法,至此记下以便日后查阅。pom.xml引入如下:&amp;amp;lt;dependency&amp;amp;gt; &amp;amp;lt;groupId&amp;amp;gt;org.springframework.data&amp;amp;lt;/groupId&amp;amp;gt; &amp;a_org.springframework.data.redis

004-Python字符串-程序员宅基地

文章浏览阅读77次。Python 字符串(str)字符串是 Python 中最常用的数据类型。我们可以使用引号('或")来创建字符串。创建字符串很简单,只要为变量分配一个值即可。var1 = "Hello World!"var2 = 'DaoKe ChuZi'字符串的操作1.查看字符串有那些方法>>> a = "abc">>> dir(a)['__add__', '..._"在python中,字符串var1=\"abcde\",想要从var1中截取宇符串”bcd”,以下表达正确"

MongoDB最简单的入门教程之三 使用Java代码往MongoDB里插入数据_java mogdb插入数据-程序员宅基地

文章浏览阅读3.8k次。前两篇教程我们介绍了如何搭建MongoDB的本地环境:MongoDB最简单的入门教程之一 环境搭建以及如何用nodejs读取MongoDB里的记录:MongoDB最简单的入门教程之二 使用nodejs访问MongoDB这篇教程我们会介绍如何使用Java代码来连接MongoDB。如果您是基于Maven进行依赖管理的Java项目,只需要在您的pom.xml里加入下面的依赖定义,..._java mogdb插入数据

ssm 课程资源库APP 计算机专业毕业设计源码23834-程序员宅基地

文章浏览阅读1k次,点赞23次,收藏11次。按照课程资源库APP的角色,我划分为了学生用户、教师用户和管理员这三大部分。学生用户管理模块:(1)用户注册登录:用户注册为用户并登录课程资源库APP;用户对个人信息的增删改查,比如个人资料,密码修改。(2)网站公告:当用户点击“网站公告”这一菜单按钮,会显示管理员在后台发布的所有的公告信息,可以查看详情;(3)课程资讯:用户进行资讯的阅览,查看管理者发布的课程资讯信息。(4)作业信息:当用户点击“作业信息”这一菜单按钮,会显示管理员在后台发布的所有的作业信息,支持通过关键词对作业信息进行搜索..

揭开“定点攻击”的神秘面纱_定点挖掘攻击-程序员宅基地

文章浏览阅读1.1k次。近来,专门利用热门软件漏洞来攻击单一特定对象的恶意软件攻击越来越普遍。在颇为知名的「Aurora」恶意软件攻击 Google 以及至少其他二十多家公司之前,锁定单一目标的恶意软件攻击就已经相当普遍,而且不断入侵政府机关、军事单位、民间企业、教育机构以及一般民间网络。虽然美国政府与相关网络遭到此类攻击已不是新闻,但越来越多其他国家的政府和民间机构也面临了同样的威胁。_定点挖掘攻击

推荐文章

热门文章

相关标签