SpringBoot基于域名的动态切MongoDB源技术实现
上一篇文章实现了SpringBoot基于域名的动态切Mysql数据源技术实现SAAS多租户服务 。 但是这个SAAS平台还需要用到MongoDB , 下面就介绍一下如何实现:SpringBoot基于域名的动态切MongoDB源技术 。
SpringBoot基于域名的动态切换数据源技术实现SAAS多租户服务
大概的思路就是:每个租户独立一个MongoDB集合或服务 , 独立一个域名 , 在nginx配置域名时 , 添加一个特殊的header字段 , 后台数据层根据这个header字段的值自动切换数据 。
系统启动时加配置文件中的多mongo连接信息 , 生成多个mongo工厂对象 , 拦截器根据前端设置的租户信息把对应的mongo工厂对象绑定到当前线程 , sping对象管理器根据当前线程的mongo工厂对象生成对应的mongoTemplate对象 。

文章图片
Nginx配置
nginx配置信息如下:

文章图片
在header中设置自定义字段tenant , 给每个域名指定一个唯一的tenant值 , 后台将根据该值切换数据源 。
自定义拦截器获取当前租户标志

文章图片
注册拦截器

文章图片
定义配置加载类
加载配置文件中的mongo连接信息 。

文章图片
述(最多18字

文章图片
自定义MongoTemplate
自定义Mongo模版类 , 用于替换springboot默认Mongo模版类 。

文章图片
数据源注册服务器类(MongoContext)
1、定义mongo工厂集合和用于绑定mongo工厂的线程对象 , 拦截器根据前端传递的租户标志把对应的mongo工厂对象绑定到当前线程 。 springboot可以根据工厂对象创建mongoTemplate对象 。

文章图片
2、定义配置加载对象 , 自动加载用户配置的多个mongo连接信息 , 自动生成mongo工厂对象集合

文章图片
3、重定义mongoTemplate对象

文章图片
业务类中直接引用mongoTemplate

文章图片
【SpringBoot基于域名的动态切MongoDB源技术实现】大功告成!分别使用www.jnhn01.cn和www.jnhn02.cn两个域名访问同一个接口时会自动切换到不同的MogoDB库 。

文章图片
- One|基于Android 13打造:三星Galaxy S22抢先用上One UI 5.0
- 山西省|他穷到花老婆钱,24岁创业,靠卖网站域名发家,现身家75亿
- 英伟达|NVIDIA Triton 推理引擎公开课上新:基于多实例 GPU 和 K8s 的大规模 CV 模型部署实践
- 数字营销|按这5个方法选择老域名,网站SEO优化就成功了一半
- 苹果|澳大利亚成功制造了可控光流组件,基于光的通信设施将迎来革新
- 致远互联|跨时空协作的利器——基于生命周期管理的基础设施BIM平台
- 基于深度学习的点云分割网络及点云分割数据集
- OPPO|杀后台问题有救了!OPPO新系统曝光:基于Android 13
- 域名|小程序分销商城系统开发商业模式分享
- 中国信通院:我国用户访问的活跃域名数量达5189.6万个
