SpringBoot单数据库实例多Schema多租户实现

本文介绍了如何使用SpringBoot和Mybatis-Plus实现单数据库实例下的多Schema多租户系统,确保每个租户的数据完全隔离。通过数据库初始化、租户识别、数据源切换和运行步骤进行详细阐述,特别强调了通过域名和Nginx代理识别租户,并自定义Mybatis拦截器修改SQL中的表名以加入租户对应的Schema。
摘要由CSDN通过智能技术生成

介绍

springboot mybatis-plus 实现的单数据库实例多schema的多租户系统, 也就是一个租户使用一个数据库schema

网上的教程大部分都是基于mybatis-plus的TenantLineInnerInterceptor 实现所有的租户通过tenant_id来处理多租户之间打数据隔离

但是这个并不符合我打需求, 我需要每个租户使用一个数据库schema, 和其他的租户数据完全隔离

本实例只在本地测试通过,请勿用于生产环境!

数据初始化

这里使用数据库表 tenant存储所有的租户信息 结构如下

CREATE TABLE `tenant`.`tenant` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `db_name` varchar(255) DEFAULT '',
  `alias` varchar(255) DEFAULT NULL COMMENT '唯一标识',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO tenant.tenant (id, name, db_name, alias) VALUES (1, '阳光', 'db_1', 'a');
INSERT INTO tenant.tenant (id, name, db_name, alias) VALUES (2, '锤子门', 'db_2', 'b');
INSERT INTO tenant.tenant (id, name, db_name, alias) VALUES (3, '海贼王', 'db_3', 'c');

有3条数据,阳光,锤子门,海贼王 分别对应他们自己打数据库 db_1, db_2, db_3 这3个数据库里面有一个user表

CREATE TABLE if not exists `user` (
       `id` bigint(22) NOT NULL AUTO_INCREMENT,
       `username` varchar(255) DEFAULT NULL,
       `password` varchar(255) DEFAULT NULL,
       PRIMARY KEY (`id`)
   ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值