springboot -多数据源管理方案

多数据源的配置有多种方式

方式一 、依赖dataSource的配置

1.建立多数据源配置

spring:# 数据源配置datasource:pdm:driver-class-name: oracle.jdbc.driver.OracleDriverjdbc-url: jdbc:oracle:thin:@10.216.xxx.xxx:3000:orclusername: cfpdmpassword: capecapp:driver-class-name: oracle.jdbc.driver.OracleDriverjdbc-url: jdbc:oracle:thin:@42.193.xx1.xx1:1521:MDMSusername: capppassword: capecpsmds:driver-class-name: oracle.jdbc.driver.OracleDriverjdbc-url: jdbc:oracle:thin:@42.193.xx2.xx2:1521:MDMSusername: cpsmdspassword: cape
  1. 将数据源datasource注入到PlatformTransactionManager 事务管理器中,并注入数据源至AbstractRoutingDataSource 多数据源路由bean中
@Configuration
public class DateSourceConfig {@Bean("pdmDataSource")@ConfigurationProperties("spring.datasource.pdm")public DataSource masterDataSource(){return DataSourceBuilder.create().build();}@Bean("cappDataSource")@ConfigurationProperties("spring.datasource.capp")public DataSource cappDataSource(){return DataSourceBuilder.create().build();}@Bean("cpsmdsDataSource")@ConfigurationProperties("spring.datasource.cpsmds")public DataSource cpsmdsDataSource(){return DataSourceBuilder.create().build();}@Bean("pdm")public PlatformTransactionManager pdmTransactionManager(@Qualifier("pdmDataSource")DataSource pdmDataSource) {return new DataSourceTransactionManager(pdmDataSource);}@Bean("capp")public PlatformTransactionManager cappTransactionManager(@Qualifier("cappDataSource")DataSource cappDataSource) {return new DataSourceTransactionManager(cappDataSource);}@Bean("cpsmds")public PlatformTransactionManager cpsmdsTransactionManager(@Qualifier("cpsmdsDataSource")DataSource cpsmdsDataSource) {return new DataSourceTransactionManager(cpsmdsDataSource);}@Bean(name = "dynamicDataSource")@Primarypublic DynamicDataSource createDynamicDataSource(){Map<Object,Object> dataSourceMap = new HashMap<>();DataSource defaultDataSource = masterDataSource();dataSourceMap.put("pdm",defaultDataSource);dataSourceMap.put("capp",cappDataSource());dataSourceMap.put("cpsmds",cpsmdsDataSource());return new DynamicDataSource(defaultDataSource,dataSourceMap);}
}

3.多数据源路由AbstractRoutingDataSource 实现类

package avicit.pdm.config;import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;import javax.sql.DataSource;
import java.util.Map;public class DynamicDataSource  extends AbstractRoutingDataSource {public DynamicDataSource(DataSource defaultDataSource, Map<Object, Object> targetDataSources){super.setDefaultTargetDataSource(defaultDataSource);super.setTargetDataSources(targetDataSources);}@Overrideprotected Object determineCurrentLookupKey() {return DataSourceContextHolder.getDataSource();}
}

4.建立多数据源切换切面
根据调用的dao层包名,确定使用的多数据数是哪一个,通过DataSourceContextHolder 注入制定的数据源


@Aspect
@Component
@Slf4j
public class VpdmDSAspect {@Pointcut("execution(* avicit..*.dao.*.*(..))")public void dynamicDataSource(){}@Around("dynamicDataSource()")public Object datasourceAround(ProceedingJoinPoint point) throws Throwable {String name =  point.getSignature().getDeclaringType().getName();if(name.contains("avicit.pdm")){DataSourceContextHolder.setDataSource("pdm");}else{MethodSignature signature = (MethodSignature)point.getSignature();Method method = signature.getMethod();DS ds = method.getAnnotation(DS.class);if (Objects.nonNull(ds)){DataSourceContextHolder.setDataSource(ds.value());}else{DataSourceContextHolder.setDataSource("capp");}}try {return point.proceed();} finally {DataSourceContextHolder.removeDataSource();}}
}
  1. 多数据源事务配置
    项目中遇到Transactional 事务时候需要在事务中指定value中指定具体的数据源

在这里插入图片描述

  1. MapperScan扫描加载包下的dao和SpringBootApplication扫描制定包的bean
@MapperScan("QAZWSC.**.dao")
@SpringBootApplication(scanBasePackages = {"QAZWSC"})
@EnableTransactionManagement
@EnableKnife4j
public class XxxxApplication {public static void main(String[] args) {SpringApplication.run(XxxxApplication .class, args);}}

方式二、通过mybatis Plus的多数据源管理方案

通过mybatis的@DS 注解切换 数据源

  1. 指定主数据源,通过primary 指定默认的主数据源
spring:datasource:dynamic:primary: cappdatasource:capp:driver-class-name: oracle.jdbc.driver.OracleDriverurl: jdbc:oracle:thin:@42.193.xx1.xx1:1521:MDMSusername: capppassword: capecpsmds:driver-class-name: oracle.jdbc.driver.OracleDriverurl: jdbc:oracle:thin:@42.193.xx1.xx1:1521:MDMSusername: cpsmdspassword: cape

2.在dao层制定要使用的数据源

@DS("cpsmds")
public interface MdsProductDAO {}

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

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

相关文章

走进CHEN MEI HUA的设计哲学:书写东方女性力量与态度的时尚篇章

在时尚的舞台中央&#xff0c;品牌不止是商品&#xff0c;更是故事的讲述者、文化的传承者。CHEN MEI HUA&#xff0c;一个源自中国上海的高端女装品牌&#xff0c;以其独特的设计理念及文化内核&#xff0c;成为了时尚界一颗耀眼的明珠。今天&#xff0c;让我们一起走进CMH的世…

如何安装ElasticSearch及相关件

一、简介 ElasticSearch是什么&#xff1f; elasticsearch简写es&#xff0c;es是一个高扩展、开源的全文检索和分析引擎&#xff0c;它可以准实时地快速存储、搜索、分析海量的数据。 ElasticSearch 插件 elasticsearch-head是一款专门针对于elasticsearch的客户端工具&am…

3W 1.5KVDC 隔离单输出 DC/DC 电源模块 ——TPL-3W 系列

TPL-3W系列是一款额定功率为3W的隔离产品&#xff0c;国际标准引脚&#xff0c;宽范围工作温度–40℃ 到 105℃&#xff0c;在此温度范围内都可以稳定输出3W&#xff0c;并且效率非常高&#xff0c;高达88%&#xff0c;同时负载调整率非常低&#xff0c;对于有输出电压精度有要…

ATA-300/3000系列功率放大器全新升级!免费样机“试”不宜迟!

2024年4月&#xff0c;Aigtek安泰电子ATA-300/3000系列功率放大器&#xff0c;迎来了进一步升级&#xff0c;最大输出功率可达1000Wp&#xff0c;最大输出电流20Ap&#xff0c;四象限输出&#xff0c;可驱动功率型负载。新产品的功率密度和可靠性都更高&#xff0c;能够进行的进…

【漏洞复现】某小日子太阳能系统DataCube3审计

漏洞描述 某小日子太阳能系统DataCube3终端测量系统 多个漏洞利用方式 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未经授权请勿利用文章中的技术资料对任何计算机系统进…

华普检测温湿度监测系统建设方案

一、项目背景 随着医疗行业的蓬勃发展&#xff0c;药品、试剂和血液的储存安全直接关系到患者的健康。根据《药品存储管理规范》、《医疗器械冷链&#xff08;运输、贮存&#xff09;管理指南》、《疫苗储存和运输管理规范》和《血液存储要求》等相关法规&#xff0c;医院药剂…

uni-app(一):云端插件的使用(Android)

云端插件的使用 1.创建项目2.购买插件3.选用插件4.进入 uni-app 配置文件修改支持 CPU 类型5.制作支持 App 的自定义调试基座6.等待自定义调试基座打包完成7.编写调用插件代码8.运行 1.创建项目 2.购买插件 3.选用插件 4.进入 uni-app 配置文件修改支持 CPU 类型 5.制作支持 Ap…

【valse 2024】开幕式内容汇总(持续更新)

提示&#xff1a;更新中&#xff0c;一周左右更新完毕。需要具体课件的可私信 文章目录 一、大会主旨报告主旨报告-1:大模型时代的机遇和挑战主旨报告-2:以深度学习框架为牵引促进自主 AI生态发展主旨报告-3:从洞穴的影子到智能的光辉--连接和交互方式的改变塑造未来生活 二、大…

对camera raw中的纹理和清晰度的内容的修正(之前的内容写错了,懒得改了重新写一篇)

之前对于环的解释&#xff0c;不太行&#xff0c;这里我给出进一步地说明。 首先对环的解释: 我这里说的环指的是频域段中的ai变化的时候对图像像素的变化的极大的影响程度的环状效果&#xff0c;会出现不规则的环状的提亮或增暗的效果。实际上是每个fj都有影响&#xff0c;但…

限量背包问题

问题描述 限量背包问题&#xff1a;从m个物品中挑选出最多v个物品放入容量为n的背包。 问题分析 限量背包问题&#xff0c;可以用来解决许多问题&#xff0c;例如要求从n个物品中挑选出最多v个物品放入容量为m的背包使得背包最后的价值最大&#xff0c;或者总共有多少种放法…

【数据结构】栈的实现以及数组和链表的优缺点

个人主页&#xff1a;一代… 个人专栏&#xff1a;数据结构 1.栈 1.1栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进…

ETL工具kettle(PDI)入门教程,Job

先新建两个Transform&#xff0c;MysqlToMysql.ktr和CsvToExcel.ktrURL&#xff1a;ETL工具kettle入门教程&#xff0c;transform&#xff0c;Mysql-&#xff1e;Mysql&#xff0c;Csv-&#xff1e;Excel-CSDN博客 主对象树&#xff0c;作业上右击&#xff0c;点击新建 核心对…

面试题库-项目

1.项目主要实现了哪些功能&#xff1f; 本项目是专门为校园食堂窗口定制的一款软件产品&#xff0c;包括系统管理后台和客户端两部分。其中系统管理后台主要提供给食堂内部员工使用&#xff0c;可以对餐厅的菜品、套餐、订单、员工等进行管理维护。客户端主要提供给学生及校职…

台球桌上的答案 如何优化图形化编程对复杂程序的展现

在公司的休息区&#xff0c;卧龙和凤雏正站在台球桌旁&#xff0c;一场激战即将打响。 “来吧&#xff0c;凤雏&#xff0c;让我们一决高下&#xff01;”卧龙手持台球杆&#xff0c;面带自信的微笑&#xff0c;向凤雏发起挑战。 凤雏点了点头&#xff0c;拿起台球杆&#xff0…

自定义表单工作流的优势介绍

当前&#xff0c;应用低代码技术平台可以助力企业提高效率&#xff0c;降低开发成本&#xff0c;实现个性化场景定制&#xff0c;因而越来越得到了客户的信赖与喜爱。很多客户朋友询问自定义表单工作流的优势和特点&#xff0c;为了帮助大家解决这个疑问&#xff0c;今天&#…

代码随想录算法训练营Day 38| 动态规划part01 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

代码随想录算法训练营Day 38| 动态规划part01 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯 文章目录 代码随想录算法训练营Day 38| 动态规划part01 | 理论基础、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯理论基础一、常规题目二、解题步骤…

PLC设备通过智能网关采用HTTP协议JSON文件对接MES等系统平台

智能网关IGT-DSER集成了多种PLC的原厂协议&#xff0c;方便实现各种PLC、智能仪表通过HTTP协议与MES等各种系统平台通讯对接。PLC内不用编写程序&#xff0c;设备不用停机&#xff0c;通过网关的参数配置软件(下载地址)配置JSON文件的字段与PLC寄存器地址等参数即可。 智能网关…

如何给文件和文件夹添加备注信息

1. 给文件添加备注信息 1. 打开文件夹&#xff0c;点击查看 → 选项 → 更改文件夹和搜索选项 → 勾除隐藏受保护的操作系统文件 → 勾选显示隐藏的文件、文件夹和驱动器&#xff1b; 2. listary工具搜索desktop.ini&#xff0c;随便点击一个desktop.ini文件&#xff0c;即可…

Gartner发布准备应对勒索软件攻击指南:勒索软件攻击的三个阶段及其防御生命周期

攻击者改变了策略&#xff0c;在某些情况下转向勒索软件。安全和风险管理领导者必须通过提高检测和预防能力来为勒索软件攻击做好准备&#xff0c;同时还要改进其事后应对策略。 主要发现 勒索软件&#xff08;无加密的数据盗窃攻击&#xff09;是攻击者越来越多地使用的策略。…

git的标签管理

理解标签 在Git中,标签tag用于标记特定的一个重要点&#xff0c;比如版本发布。标签允许捕捉某一次提交的状态&#xff0c;当我们需要退回到某次提叫的版本时&#xff0c;通过标签我们快速定位到。标签具有两种类型&#xff1a; 轻量标签&#xff1a;最简单的标签形式&#x…