SpringBoot基于域名的动态切MongoDB源技术实现

上一篇文章实现了SpringBoot基于域名的动态切Mysql数据源技术实现SAAS多租户服务 。 但是这个SAAS平台还需要用到MongoDB , 下面就介绍一下如何实现:SpringBoot基于域名的动态切MongoDB源技术 。
SpringBoot基于域名的动态切换数据源技术实现SAAS多租户服务
大概的思路就是:每个租户独立一个MongoDB集合或服务 , 独立一个域名 , 在nginx配置域名时 , 添加一个特殊的header字段 , 后台数据层根据这个header字段的值自动切换数据 。
系统启动时加配置文件中的多mongo连接信息 , 生成多个mongo工厂对象 , 拦截器根据前端设置的租户信息把对应的mongo工厂对象绑定到当前线程 , sping对象管理器根据当前线程的mongo工厂对象生成对应的mongoTemplate对象 。
SpringBoot基于域名的动态切MongoDB源技术实现
文章图片
Nginx配置
nginx配置信息如下:
SpringBoot基于域名的动态切MongoDB源技术实现
文章图片
在header中设置自定义字段tenant , 给每个域名指定一个唯一的tenant值 , 后台将根据该值切换数据源 。
自定义拦截器获取当前租户标志
SpringBoot基于域名的动态切MongoDB源技术实现
文章图片
注册拦截器
SpringBoot基于域名的动态切MongoDB源技术实现
文章图片
定义配置加载类
加载配置文件中的mongo连接信息 。
SpringBoot基于域名的动态切MongoDB源技术实现
文章图片
述(最多18字
SpringBoot基于域名的动态切MongoDB源技术实现
文章图片
自定义MongoTemplate
自定义Mongo模版类 , 用于替换springboot默认Mongo模版类 。
SpringBoot基于域名的动态切MongoDB源技术实现
文章图片
数据源注册服务器类(MongoContext)
1、定义mongo工厂集合和用于绑定mongo工厂的线程对象 , 拦截器根据前端传递的租户标志把对应的mongo工厂对象绑定到当前线程 。 springboot可以根据工厂对象创建mongoTemplate对象 。
SpringBoot基于域名的动态切MongoDB源技术实现
文章图片
2、定义配置加载对象 , 自动加载用户配置的多个mongo连接信息 , 自动生成mongo工厂对象集合
SpringBoot基于域名的动态切MongoDB源技术实现
文章图片
3、重定义mongoTemplate对象
SpringBoot基于域名的动态切MongoDB源技术实现
文章图片
业务类中直接引用mongoTemplate
SpringBoot基于域名的动态切MongoDB源技术实现
文章图片
SpringBoot基于域名的动态切MongoDB源技术实现】大功告成!分别使用www.jnhn01.cn和www.jnhn02.cn两个域名访问同一个接口时会自动切换到不同的MogoDB库 。
SpringBoot基于域名的动态切MongoDB源技术实现
文章图片