介绍
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