程序员の奇妙冒险

返回
多租户 Java MyBatis Spring Boot 多租户
2024-11-05 10:38 阅读:132 评论:0

druid-multi-tenant-starter将系统改造成多租户系统如此简单

项目开源地址 https://github.com/osinn/druid-multi-tenant-starter ,如果对您有帮助,麻烦给个Star 多租户插件 druid-multi-tenant-starter 的出现为系统的改造成多租户带来了前所未有的便捷。它以其独特的优势和强大的功能,使...

                    <link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mobile/css/edit_views_html-db03dd5f8c.min.css">
                    <blockquote> 

项目开源地址 https://github.com/osinn/druid-multi-tenant-starter ,如果对您有帮助,麻烦给个Star

       多租户插件 druid-multi-tenant-starter 的出现为系统的改造成多租户带来了前所未有的便捷。它以其独特的优势和强大的功能,使得将系统改造成多租户系统变得如此简单。

       从技术层面来看,druid-multi-tenant-starter 它能够处理租户之间的数据隔离和资源分配,确保每个租户都能享受到独立且稳定的服务,迅速将原本复杂的单一系统升级为多租户系统,大大提高了系统的灵活性和可扩展性。不仅能够轻松应对业务的快速增长,还降低了运营成本和维护难度,无论您的系统规模大小、业务类型如何,它都能为您提供高效、可靠的多租户解决方案,多租户插件 druid-multi-tenant-starter 确实让系统向多租户系统的改造变得轻而易举,为企业的数字化转型之路注入了强大的动力。

     此外,多租户插件 druid-multi-tenant-starter 支持jdk1.8+、Spring boot2.x以及兼容Spring boot 3.x版本

单一系统改造成多租户系统演示

首先在数据库中将所有表都加上租户ID,例如字段名称为 tenant_id

DELIMITER $$

CREATE PROCEDURE AddColumnToAllTables(p_column_name VARCHAR(255)) BEGIN DECLARE v_table_name VARCHAR(255);

DECLARE table_cursor CURSOR FOR 
    SELECT table_name FROM information_schema.tables WHERE table_schema = (SELECT DATABASE()) AND table_type = 'BASE TABLE';

DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_table_name = NULL;

OPEN table_cursor;

read_loop: LOOP
    FETCH table_cursor INTO v_table_name;
    
    IF v_table_name IS NULL THEN
        LEAVE read_loop;
    END IF;
    
    SET @stmt = CONCAT('ALTER TABLE `', v_table_name, '` ADD COLUMN `', p_column_name, "` bigint(20) DEFAULT NULL COMMENT '租户Id'");
    PREPARE s1 FROM @stmt;
    EXECUTE s1;
    DEALLOCATE PREPARE s1;
END LOOP;

CLOSE table_cursor;

END$$

DELIMITER ;

CALL AddColumnToAllTables('tenant_id');

  • 以上sql脚本会将所有表加上 tenant_id 字段

项目中引入插件依赖包

<dependency>
    <groupId>io.github.osinn</groupId>
    <artifactId>druid-multi-tenant-starter</artifactId>
    <version>最新版本</version>
</dependency>

项目配置

  • 在yml配置文件中添加以下配置来启用多租户插件
mybatis:
  tenant:
    config:
      # 是否启用多租户插件
      enable: true
      # 数据库表中租户ID的字段名
      tenant-id-column: tenant_id

实现提供获取多租户值接口

/**
 * 演示:提供多租户ID服务接口
 *
 * @author wency_cai
 */
@Service
public class TenantServiceImpl implements ITenantService<Integer>{
@Override
public List&lt;Integer&gt; getTenantIds() {
    // 开发者需要自己实现获取系统多租户id值的代码逻辑,如果有多个返回多个值即可
    int tenantId = 1;
    return Lists.newArrayList(tenantId);
}

}

  • 到此为止已经将系统改造成多租户系统,租户之间的数据隔离
  • 更多的功能请在github上查看文档

单一系统升级为多租户系统就是这么简单,very good

评论 (0)
暂无评论 来抢沙发吧~