当前位置: 首页 > news >正文

springboot根据租户id动态指定数据源

代码地址

码云地址springboot根据租户id动态指定数据源: springboot根据租户id指定动态数据源,结合mybatis+mysql+多数源下的事务管理

创建3个数据库和对应的表

sql脚本在下图位置

代码的执行顺序

  1. 先设置主数据库的数据源
  2. 配置目标数据源和默认数据源
  3. 有了主库的数据源,才能读取主数据库配置的所有数据源,重新初始化数据源并放入ioc容器中
  4. 在访问service方法之前,先拦截到aop中,把请求头中的租户id,放入本地线程上下文中
  5. 在调用mapper接口的时候,跳转到自定义的数据源对应的determineCurrentLookupKey() 方法中,动态切换租户id下的数据源
  6. 拿到结果打印

aa方法,在header头中输入对应的租户id

 可以看到对应的租户01对应的数据库下的表的数据 打印出来了

输入租户02,可以看到租户02对应数据库下的表的数据打印出来了

 

执行addBiao方法,输入对应的租户id

 可以看到租户2的数据库中,王五并没有被插入,说明多数据源下的事务生效了,已经回滚数据了

注意 

aop的执行顺序,一定要比事务管理器的顺序要优先,否则事务不会生效

如果不设置Order注解,那么事务就不会拿到,DataSourceContextHolder设置的上下文中的租户id

到了动态数据源的方法中,就会获取数据源为null,也就是lookupKey为null

http://www.lryc.cn/news/508134.html

相关文章:

  • 使用C语言编写UDP循环接收并打印消息的程序
  • 【AI】✈️问答页面搭建-内网穿透公网可访问!
  • 计算机毕业设计原创定制(免费送源码):NodeJS+MVVM+MySQL 樱花在线视频网站
  • ECharts热力图-笛卡尔坐标系上的热力图,附视频讲解与代码下载
  • 【Lua热更新】下篇
  • Facebook 与数字社交的未来走向
  • 微信小程序实现二维码海报保存分享功能
  • Android 搭建AIDL Client和Server端,双向通信
  • 深度学习从入门到精通——图像分割实战DeeplabV3
  • STM32-笔记5-按键点灯(中断方法)
  • C++ 只出现一次的数字 - 力扣(LeetCode)
  • C++设计模式:享元模式 (附文字处理系统中的字符对象案例)
  • android EditText密码自动填充适配
  • LeetCode 刷题笔记
  • 【Java基础面试题034】Java泛型擦除是什么?
  • 使用ssh命令远程登录服务器的两种便捷方式:简化ssh命令、创建bat文件
  • access数据库代做/mysql代做/Sql server数据库代做辅导设计服务
  • 第十七届山东省职业院校技能大赛 中职组“网络安全”赛项任务书正式赛题
  • Android学习(五)-Kotlin编程语言-面向对象中的 继承-构造函数-接口三模块学习
  • 滑动窗口 + 算法复习
  • 贪心算法 greedy
  • 基于python的家教预约网站-家教信息平台系统
  • 基于深度学习多图像融合的屏幕缺陷检测方案
  • MySQL基础笔记(三)
  • 【JetPack】WorkManager笔记
  • docker 安装 ftp
  • 5.C语言内存分区-堆-栈
  • 传统CV算法——基于opencv的答题卡识别判卷系统
  • 国产 HighGo 数据库企业版安装与配置指南
  • 「Mac畅玩鸿蒙与硬件46」UI互动应用篇23 - 自定义天气预报组件