背景
需求场景是需要实现一个支持多租户多数据源的系统,每个租户的数据库完全隔离。并且系统需求通过区分不同租户的请求进行动态数据源的切换。
系统底层框架是使用的SpringCloud + MyBatisPlus(一个MyBatis的增强框架),数据库连接池是Druid。
熟悉SpringBoot的同学都知道SpringBoot本身是可以配置多个数据源的,但是SpringBoot的多数据做不到动态的切换,只能在代码里面通过注解或写死。
基于以上情况,设计实现了一个动态切换数据源的实现方案。
实现功能
- 通过域名进行租户自动识别
- 通过租户识别信息,动态的选择数据源
- 各个spring微服务之间进行租户信息传递
- 通过注射方式进行强制数据源制定
下面介绍一下功能的核心实现。
核心实现
租户识别
租户信息的识别通过Nginx代理来实现,核心思路就是域名中包含租户信息,然后通过Nginx代理时,在请求头和相应头中添加租户的识别信息。
servier
如上配置后,通过Nginx代理后的请求都会带上租户信息。eg: http://abc.zane.com通过这个域名访问系统时会识别出租户为abc。
动态切换
这个是方案的核心部分,重写了MyBatis的数据源初始化过程。 讲解一下核心实现原理及核心的代码部分。
主要通过以下步骤实现: 1. 配置Spring拦截器,设置租户标示
pub

本文介绍了如何在SpringBoot应用中结合MyBatis Plus实现多租户动态数据源切换。通过Nginx代理进行租户识别,自定义拦截器保存租户信息,并重写MyBatis数据源初始化,实现根据租户动态选择数据源。同时,文章探讨了租户信息在微服务间的传递和通过注解指定数据源等问题。
最低0.47元/天 解锁文章
1956

被折叠的 条评论
为什么被折叠?



