分享

SpringBoot基于域名的动态切换数据源技术实现SAAS多租户服务

 贾朋亮博客 2022-05-19 发布于北京

最近需要实现一个支持多租户的SAAS平台,大概的思路就是:每个租户独立一个数据库,独立一个域名,在nginx配置域名时,添加一个特殊的header字段,后台数据层根据这个header字段的值自动切换数据源。

Nginx配置

在header中设置自定义字段tenant,给每个域名指定一个唯一的tenant值,后台将根据该值切换数据源。

自定义拦截器获取当前租户标志

通过拦截器获取header中的租户标志,再通过InheritableThreadLocal把租户标志绑定到当前线程,数据层可以通过该标志切换数据源。

注册拦截器

自定义连接器管理类,添加上面自定义的拦截器,获取租户标志。

数据源注册服务器类

加载配置文件初始化数据源对象到内存。其中DataSourcePropertyLoader为自定义的配置文件加载类,可以根据实际情况自己实现。

自定义动态数据源

自定义动态数据源,用于替换springboot默认数据源管理器,通过获取线程中绑定的租户标志查找数据源。

配置类

重定义dataSource对象,替换springboot默认的数据源对象。

大功告成!分别使用www.jnhn01.cn和www.jnhn02.cn两个域名访问同一个接口时会自动切换到不同的数据库。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多