type
status
date
slug
summary
tags
category
icon
password
js
为了实现多账套的功能,想到之前用过的 mybatis plus 的多数据源插件(dynamic-datasource),研究了一下可以支持动态配置数据源,正好符合需求。
📝 思路
一个账套对应一个数据库,数据库名使用统一的前缀,最后跟上账套 id。比如db-1,db-2 这样。这样的话,在账套后台新增账套后,按设置好的命名规则,新建数据库,然后再使用 SQL 文件初始化数据库,最后动态加载数据源,这样新建的账套马上就能使用了。以下是一些关键点,仅供参考。
引入Maven
我的Spring Boot是3.4.0,所以同这个版本的dynamic-datasource
账套相关的Mapper要指定账套数据库,其他的Mapper需要动态
在账套相关的Mapper上添加@DS(’tenants’),这里假定配置的数据源名是tenants,指定了@DS的类,不会收到切换数据源的影响。
其他数据源如何加载
由于我这个项目数据库都在一台数据库服务器里,这里只要读取配置里的url,username,password就行,新增数据库的时候会记录数据库名,直接替换掉url中的tenants,在动态加载就行。
事务要怎么处理
dynamic-datasource插件,很贴心的有@DSTransaction,在事务里的数据库方法,必须使用@DSTransaction来替代@Transaction,不然会找不到需要的数据源。
如何识别当前请求是哪个账套的
在前端请求时,在header中添加tenantId,然后在后台程序的拦截器中,获取到这个id,通过DynamicDataSourceContextHolder.push(tenantId)的方法来切换到对应的数据源。请求结束后调用DynamicDataSourceContextHolder.clear()释放掉数据源连接。
- 作者:吕行者
 - 链接:https://www.lvy.life/article/2025/10/29/29b1f2f0-5182-8011-b43f-d78382b06284
 - 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
 







