一种基于新旧系统的多租户实现方法技术方案

技术编号:38716471 阅读:11 留言:0更新日期:2023-09-08 14:59
本发明专利技术涉及Java环境和SpringBoot集成框架技术领域,具体为一种基于新旧系统的多租户实现方法,包括以下步骤:根据租户要求分配应用系统对应的子域名;在旧系统后台应用代码中添加mysql、druid的pom依赖;编写数据源配置类,将数据源配置信息注入到容器;有益效果为:本发明专利技术提出的基于新旧系统的多租户实现方法,利用域名解析和动态数据源切换机制,实现了多租户场景下每个租户独立一个域名,旧系统独立数据库,新系统逻辑数据筛选,无需额外部署应用,并且实现数据的安全隔离问题。并且租户信息域名表和数据源表有单独的维护库,大大提高了多租户的数据源的灵活性和安全性。了多租户的数据源的灵活性和安全性。了多租户的数据源的灵活性和安全性。

【技术实现步骤摘要】
一种基于新旧系统的多租户实现方法


[0001]本专利技术涉及Java环境和SpringBoot集成框架
,具体为一种基于新旧系统的多租户实现方法。

技术介绍

[0002]Springboot提供了AbstractRoutingDataSource抽象类,让用户可以选择当前的使用数据源该类提供了一个抽象方法determineCurrentLookupKey(),切换数据源时springboot会调用这个方法,所以数据源切换只需要实现该方法,在该方法中返回需要切换的数据源名称即可。
[0003]现有技术中,多租户业务场景下,往往每个租户都独立一个数据库(是否独立数据源实例根据实际需要处理),每个租户的数据在数据库层面先做了隔离,所以在开展详细业务时不同租户的数据并不会混淆。但是随之而来的就是数据灵活切换、隔离的需求,需要封装一套方法,在编写业务代码时可以根据提供的租户内码便捷的切换到对应的数据。

技术实现思路

[0004]本专利技术的目的在于提供一种基于新旧系统的多租户实现方法,以解决上述
技术介绍
中提出的问题。
[0005]为实现上述目的,本专利技术提供如下技术方案:一种基于新旧系统的多租户实现方法,所述多租户实现方法包括以下步骤:
[0006]根据租户要求分配应用系统对应的子域名;
[0007]在旧系统后台应用代码中添加mysql、druid的pom依赖;
[0008]编写数据源配置类,将数据源配置信息注入到容器;
[0009]编写DynamicDataSource类继承AbstractRoutingDataSource抽象类;
[0010]编写租户数据源切换类,供业务切换数据源时统一调用;
[0011]旧系统的改造;
[0012]新系统的改造;
[0013]对租户的敏感信息,系统进行加密处理;
[0014]编写异常类、异常枚举类,规范异常抛出。
[0015]优选的,根据租户要求分配应用系统对应的子域名时,租户通过不同的域名访问分配给自己的应用系统,子域名和租户对应关系数据存入单独的数据库表中。
[0016]优选的,在旧系统后台应用代码中添加mysql、druid的pom依赖时,创建租户表和数据源表,租户表用于存储租户信息,数据源表用于存储数据库连接地址与租户的对应关系。
[0017]优选的,编写数据源配置类,将数据源配置信息注入到容器时,数据源配置类DataSourceConfig,将多个配置好的数据源连接信息写入,并设置到动态数据源对象中。
[0018]优选的,编写DynamicDataSource类继承AbstractRoutingDataSource抽象类时,
维护当前数据源信息,提供切换方法。
[0019]优选的,编写租户数据源切换类,供业务切换数据源时统一调用时,根据租户内码获取数据源连接信息,并切换数据源,切换方法中对当前连接信息做了判断,不会重复切换,也不会重复查配置库获取数据源信息。
[0020]优选的,旧系统的改造时,编写代理请求地址转换接口,根据过滤的子域名查询对应的租户内码,为了避免频繁请求访问数据库,利用了Redis缓存技术用于存放作为key值得子域名和作为value值的tenant

id。
[0021]优选的,新系统的改造时,新系统的每张业务表里增加tenant

id字段,根据租户标识实现数据scheme级别隔离。
[0022]优选的,对租户的敏感信息,系统进行加密处理时,对特殊符号执行安全解析过滤,通用工具类中提供对租户信息的加、解密算法、危险敏感字符的过滤、权限验证方法。
[0023]与现有技术相比,本专利技术的有益效果是:
[0024]本专利技术提出的基于新旧系统的多租户实现方法,利用域名解析和动态数据源切换机制,实现了多租户场景下每个租户独立一个域名,旧系统独立数据库,新系统逻辑数据筛选,无需额外部署应用,并且实现数据的安全隔离问题。并且租户信息域名表和数据源表有单独的维护库,大大提高了多租户的数据源的灵活性和安全性。
附图说明
[0025]图1为本专利技术方法流程图。
具体实施方式
[0026]为了使本专利技术的目的、技术方案进行清楚、完整地描述,及优点更加清楚明白,以下结合附图对本专利技术实施例进行进一步详细说明。应当理解,此处所描述的具体实施例是本专利技术一部分实施例,而不是全部的实施例,仅仅用以解释本专利技术实施例,并不用于限定本专利技术实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0027]请参阅图1,本专利技术提供一种技术方案:一种基于新旧系统的多租户实现方法,所述多租户实现方法包括以下步骤:
[0028]1、根据租户要求分配应用系统对应的子域名,租户通过不同的域名访问分配给自己的应用系统,此子域名和租户对应关系数据存入单独的数据库表中。
[0029]2、在旧系统后台应用代码中添加mysql、druid等pom依赖;创建租户表和数据源表,租户表用于存储租户信息,数据源表用于存储数据库连接地址与租户的对应关系。
[0030]3、编写数据源配置类,将数据源配置信息注入到容器。数据源配置类DataSourceConfig,
[0031]将多个配置好的数据源连接信息写入,并设置到动态数据源对象中。
[0032]4、编写DynamicDataSource类继承AbstractRoutingDataSource抽象类,维护当前数据源信息,提供切换方法。
[0033]5、编写租户数据源切换类,业务切换数据源时统一调用此类。根据租户内码获取数据源连接信息,并切换数据源,切换方法中对当前连接信息做了判断,不会重复切换,也
不会重复查配置库获取数据源信息。
[0034]6、旧系统的改造。编写代理请求地址转换接口,根据过滤的子域名查询对应的租户内码,为了避免频繁请求访问数据库,此处利用了Redis缓存技术用于存放作为key值得子域名和作为value值的tenant

id。登录之前的一系列请求调用此接口获取到tenant

id,此值放入header调用权限认证服务(旧系统)的生成token接口,再将tenant

id存入token中。之后前端每次向后台发送的请求,都通过后端的请求拦截器解析token中的tenant

id,旧系统根据此内码切换不同的数据源。
[0035]7、新系统的改造。新系统的每张业务表里增加tenant

id字段,根据租户标识实现数据scheme级别隔离。根据第6步的生成token接口,新系统中的请求拦截器每次再token中解析tenant

id字段,并筛选数据表里包含此字段的数据。
[0036]8、对租户的敏感信息(手机号、邮本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于新旧系统的多租户实现方法,其特征在于:所述多租户实现方法包括以下步骤:根据租户要求分配应用系统对应的子域名;在旧系统后台应用代码中添加mysql、druid的pom依赖;编写数据源配置类,将数据源配置信息注入到容器;编写DynamicDataSource类继承AbstractRoutingDataSource抽象类;编写租户数据源切换类,供业务切换数据源时统一调用;旧系统的改造;新系统的改造;对租户的敏感信息,系统进行加密处理;编写异常类、异常枚举类,规范异常抛出。2.根据权利要求1所述的一种基于新旧系统的多租户实现方法,其特征在于:根据租户要求分配应用系统对应的子域名时,租户通过不同的域名访问分配给自己的应用系统,子域名和租户对应关系数据存入单独的数据库表中。3.根据权利要求1所述的一种基于新旧系统的多租户实现方法,其特征在于:在旧系统后台应用代码中添加mysql、druid的pom依赖时,创建租户表和数据源表,租户表用于存储租户信息,数据源表用于存储数据库连接地址与租户的对应关系。4.根据权利要求1所述的一种基于新旧系统的多租户实现方法,其特征在于:编写数据源配置类,将数据源配置信息注入到容器时,数据源配置类DataSourceConfig,将多个配置好的数据源连接信息写入,并设置到动态数据源对象中。5.根据权利要求1所述的...

【专利技术属性】
技术研发人员:麻荣雨李宁高鹏超毕云鹏
申请(专利权)人:浪潮云信息技术股份公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1