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

embedded/2024/12/24 8:29:20/

代码地址

码云地址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.ppmy.cn/embedded/148285.html

相关文章

Wux weapp 组件库的 bug—— wux-picker选择器组件无法正确初始化到选定的value

options的value为Number,组件无法正常使用 解决方案,修改picker-view/utils.js中的getIndexFromValue函数,如下: export function getIndexFromValue(value, col [], fieldNames DEFAULT_FIELD_NAMES) {//return getRealIndex(…

Java与容器化:如何使用Docker和Kubernetes优化Java应用的部署

在现代软件开发中,容器化技术已成为提升应用部署和管理效率的关键工具。Java应用由于其庞大的依赖性和较大的体积,常常在传统环境下部署存在挑战。幸运的是,Docker和Kubernetes的出现为Java应用的开发、部署和管理带来了极大的便利。本文将介…

学习记录:electron主进程与渲染进程直接的通信示例【开箱即用】

electron主进程与渲染进程直接的通信示例 1. 背景: electronvue实现桌面应用开发 2.异步模式 2.1使用.send 和.on的方式 preload.js中代码示例: const { contextBridge, ipcRenderer} require(electron);// 暴露通信接口 contextBridge.exposeInMa…

Ubuntu Netlink 套接字使用介绍

Netlink 套接字 是 Linux 特有的一种 IPC(进程间通信)机制,用于用户态进程和内核模块之间的通信。它可以用来完成路由管理、设备通知、网络状态更新等任务。 1. Netlink 的基本工作原理 Netlink 是一种双向通信机制。Netlink 消息分为请求和…

uni-app 统一请求处理 请求拦截器 响应拦截器 请求封装

封装API接口 import {http} from ../utils/request.js export function login(code){return http({url:/wx/getSession,method: GET,data:{code}}) }调用接口 import {login,test,phoneMessage,updateAvatar} from ../../api/user.js function userLogin(){ login(code.value…

深入Linux权限体系:守护系统安全的第一道防线

1.什么是权限? a.权限是限制人的,人真实的人身份角色,因为我是学生所以我不能进校长办公室 b.目标事物的属性,也会影响权限 权限角色事物属性 权限就是你能不能做一件事情 认识人—用户、普通用户、root用户、人切换 root&am…

【数据可视化案例】探索影响不同国家预期寿命的主要因素

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

【操作系统】基于信号量与PV操作解决东西向汽车过独木桥问题

【操作系统】基于信号量与PV操作解决东西向汽车过独木桥问题 问题 东西向汽车过独木桥,为了保证安全,只要桥上无车,则允许一方的汽车过桥,待一方的汽车全部过完后,另一方的汽车才允许过桥。某一时刻,桥上…