@DS注解方式springboot多数据源配置及失效场景解决

news/2024/11/6 10:54:38/文章来源:https://www.cnblogs.com/javaxubo/p/18525475

1.使用教程

导入依赖

<!--多数据源--><dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.0</version></dependency>
123456

配置数据源

  datasource:dynamic:# 主数据源位masterprimary: masterstrict: falsedatasource:master:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://172.16.5.10:3306/master?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghaiusername: masterpassword: mastertype: com.alibaba.druid.pool.DruidDataSourcedruid:initial-size: 20min-idle: 20max-active: 100max-wait: 60000pool-prepared-statements: falsemax-pool-prepared-statement-per-connection-size: 20timeBetweenEvictionRunsMillis: 60000validationQuery: SELECT 1 FROM dualfilter: stat,wall,log4jslave:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://172.16.5.69:3306/slave?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghaiusername: slavepassword: slavetype: com.alibaba.druid.pool.DruidDataSourcedruid:initial-size: 20min-idle: 20max-active: 100max-wait: 60000pool-prepared-statements: falsemax-pool-prepared-statement-per-connection-size: 20timeBetweenEvictionRunsMillis: 60000validationQuery: SELECT 1 FROM dualfilter: stat,wall,log4j#mybatis-plus
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: truemapper-locations: classpath*:/mapper/**/*mapper.xmltype-aliases-package: com.byyl.datacenter.entityglobal-config:db-config:logic-delete-field: deleted # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)logic-delete-value: 1 # 逻辑已删除值(默认为 1)logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051

使用方式

再service具体实现类或者方法上添加 @DS("slave“) 即可切换数据源【slave为配置文件里配置的数据源名称】
在这里插入图片描述

失效场景解决方案

使用动态数据源(@DS)时,@Transactional使用可能会照成@DS失效。

解决方案:

  • 1.去掉事务(不建议)
  • 2.@DS切换数据源的方法添加事务传播属性@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
  • 3.去掉@DS切换数据源方法的事务,主方法用@DSTransactional注解。

@DS注解加到mapper接口、service接口、service方法里都不生效

解决方案:

  • 添加到service实现类或者实现类里具体的方法上。

在同一个实现类中,一个非DS注解的常规方法里调用@DS注解的方法可能失效

解决方案:

  • 将该DS注解方法定义在不同的类中,通过bean注入的方式调用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/826665.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

烟雾检测识别智慧矿山一体机水仓水位异常识别针对环境不安全因素的算法保障

在现代矿业生产中,安全始终是最为关键的议题之一。为了提升矿山的安全监管水平,降低生产风险,智慧矿山一体机应运而生。这款设备融合了最新的人工智能技术,为矿山提供了一个全面、高效、智能化的安全解决方案。以下是对智慧矿山一体机的详细介绍,包括其产品特性、环境不安…

版本控制工具 SVN 已跳过,其余有冲突

更新报错解决 原文:https://blog.csdn.net/hty18410140180/article/details/86231998 在项目文件夹中,点击解决再点击确定一般我还会再点击一下清理再点击确定然后再更新,如果还是提示有冲突,就把冲突的那几个文件夹删除后,再更新。

tiup dm集群扩缩容

扩容dm集群的worker节点操作: 增加扩容配置文件 vim dm-add-work.yml点击查看代码 worker_servers:- host: 192.168.9.131进行扩容操作: tiup dm scale-out dm-test dm-add-work.yml -uroot -p ![image](https://img2024.cnblogs.com/blog/3549886/202411/3549886-2024110415…

swiper插件同屏多个slide时在loop模式下点击切换失效的解决方案

需求: 英雄展示页面提供纵向头像滚动切换功能,需要支持循环滚动、拖动切换、前后按钮切换、点击头像图标切换等功能。代码:<div :class="$style.swiperBox"><swiperref="heroSwiper":options="swiperOptions":class="$style.sw…

探索AI创意新天地:FluxAI.art 在线生成精美图像

FluxAI.art 提供免费的AI图像生成工具 Flux.1,用户可以通过简单的文本描述轻松生成各种风格和高质量的图像,适合创意项目和日常应用。摘要:FluxAI.art 提供免费的AI图像生成工具 Flux.1,用户可以通过简单的文本描述轻松生成各种风格和高质量的图像,适合创意项目和日常应用…

linux 启动过程 GRUB 引导流程

https://www.cnblogs.com/Link-Luck/p/9858519.html Boot loader引导加载器,用来引导系统的启动,它把用户选定的内核加载到内存空间中,把控制权交给内核。  Windows下引导加载器:ntloader  Linux下引导加载器:    LILO:LInux LOader    GRUB:GRand Unified …

Air780E之TCP应用,你了解吗?

​ 一、TCP简介 TCP(TransmissionControlProtocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它主要用于在不可靠的网络环境中提供稳定的数据传输服务,确保数据能够按照顺序、无错误地到达接收端。TCP通过三次握手建立连接,使用滑动窗口进行流…

SPI接口,如何对W25Q64进行读写操作?深度解析

​ 一、SPI概述 SPI(SerialPeripheralInterface)是一种同步串行通信协议,广泛应用于微控制器和外围设备之间的数据传输。它由摩托罗拉公司开发,具有全双工通信能力,即可以同时进行数据的发送和接收。 SPI通信通常涉及四条信号线: (1)MOSI(MasterOutSlaveIn):主设备发…

如何在Chrome最新浏览器中调用ActiveX/OCX控件?

小编最近登陆工商银行网上银行,发现工商银行的个人网银网页,由于使用了ActiveX安全控件,导致不能用高版本Chrome浏览器打开,目前只有使用IE或基于IE内核的浏览器才能正常登录网上银行,而IE已经彻底停止更新了,打开工商银行个人网银登陆页面会显示下面提示,对于用户来说非…

java通过日期获取季度的日常用法

在日常的工作当中,我们经常会遇到将日期对应通过接口返回季度的业务需求;一般的方法有如下: 第一种方式:用LocalDate/*** 根据当前日期获取季度* @param date 日期* @return 季度*/public static int getQuarterOfYear(LocalDate date) {return (int) date.get(IsoFields.Q…

dubbo3.0 服务导入导出原理

不管是服务导出还是服务引入,都发生在应用启动过程中,比如:在启动类上加上 @EnableDubbo 时,该注解上有一个 @DubboComponentScan 注解,@DubboComponentScan 注解 Import 了一个 DubboComponentScanRegistrar,DubboComponentScanRegistrar 中会调用 DubboSpringInitializ…