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库 。
文章图片
- 超10000名技术人员基于“行云”协同备战 京东云成功保障央视春
- 域名|杰夫·贝佐斯:时间决定问题的高度!(发人深省)
- 阿里云|北京冬奥会将基于阿里云向全球转播,4K内容超6000小时
- 基于大数据的“烟台文旅云”平台
- 中国传统文化|基于AlphaGo的强化学习基础模型,对王阳明心学的现代分析
- 病毒|作业帮基于 DeltaLake 的数据湖建设最佳实践
- icloud|iOS 15.4 Beta:可在iPhone上直接设置iCloud自定义邮件域名
- 算法|36氪首发|「霍里思特」获1亿元人民币A轮融资,基于X射线+AI算法开发的智能选矿机已落地国内龙头企业
- 国家发改委|两部门:大力培育基于云网基础设施的融合应用
- 模型|基于数据的体验洞察与验证——GSM模型