mybatis整合mycat实现分库

本文详细介绍了如何在多租户环境中使用Mycat进行数据库分库分表,并通过MyBatis拦截器实现租户ID注入,确保数据隔离。文章覆盖了Mycat服务搭建、配置、测试流程,以及MyBatis拦截器的实现与配置。

在这里插入图片描述

前言

工作中我们可能会遇到的一个问题,可能会出现多租户场景,这种情况下,我们不得不对我们的系统分库,对于每一个租户来说都是一个数据库,这个我们可能考虑到多数据源去解决,也是一个思路,这几天调研了mycat做分库,下面慢慢分享这一个过程。

如何获取当前线程的租户

我们首先要解决这个问题,今天首先要出场的是ThreadLocal,对于这个类我的解释是:

  • 保存线程上下文信息,在任意需要的地方可以获取!!!
  • 线程安全的,避免某些情况需要考虑线程安全必须同步带来的性能损失!!!

之前看过阿里规范有这条:
在这里插入图片描述

实现

首先来一个接口BatmanTenant,这个接口主要封装两个方法。

public interface BatmanTenant {
   
   
    void setBatmanTenantId(String var1);

    String getBatmanTenantId();
}

接着创建一个实现类TenantStore去实现BatmanTenant,一个静态变量CONTEXT存取上下文的租户信息。

public class TenantStore implements BatmanTenant {
   
   
    private static final ThreadLocal<String> CONTEXT = new TransmittableThreadLocal<>();

    private static boolean isApplicationTenant = false;

    private static String applicationTenantId;

    private static final String TENANT_DEFAULT_ID = "t0";

    public static void setTenantId(String tenantId) {
   
   
        CONTEXT.set(tenantId);
    }

    public static String getTenantId() {
   
   
        if (isApplicationTenant) {
   
   
            return applicationTenantId;
        }

        String tenantId = CONTEXT.get();
        if (tenantId == null || "".equals(tenantId)) {
   
   
            tenantId = TENANT_DEFAULT_ID;
        }
        return tenantId;
    }

    public static void clear() {
   
   
        CONTEXT.remove();
    }

    public static boolean isApplicationTenant() {
   
   
        return isApplicationTenant;
    }

    public static void setApplicationTenant(boolean applicationTenant) {
   
   
        isApplicationTenant = applicationTenant;
    }

    public static String getApplicationTenantId() {
   
   
        return applicationTenantId;
    }

    public static void setApplicationTenantId
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值