多租户代码框架

This commit is contained in:
zhonghua1
2025-12-16 23:34:07 +08:00
parent 5453026309
commit 406f7d692b
36 changed files with 956 additions and 39 deletions

View File

@@ -0,0 +1,50 @@
package com.rj.tenant;
/**
* 多租户上下文持有器用于在当前线程中保存和获取租户ID。
*
* <p>
* 典型使用场景:
* <ul>
* <li>在请求入口(过滤器 / 拦截器)中根据 Header / Token 解析出租户ID并设置</li>
* <li>MyBatis-Plus 的 TenantLineHandler 从此处读取当前租户;</li>
* <li>业务代码中偶尔需要获取当前请求所在的租户。</li>
* </ul>
* 使用完成后务必调用 {@link #clear()} 清理,避免线程复用导致租户串用。
* </p>
*/
public final class TenantContextHolder {
private static final ThreadLocal<String> TENANT_ID_HOLDER = new ThreadLocal<>();
private TenantContextHolder() {
// 工具类,禁止实例化
}
/**
* 设置当前线程的租户ID。
*
* @param tenantId 租户ID允许为 null表示无租户上下文
*/
public static void setTenantId(String tenantId) {
TENANT_ID_HOLDER.set(tenantId);
}
/**
* 获取当前线程的租户ID。
*
* @return 当前租户ID可能为 null
*/
public static String getTenantId() {
return TENANT_ID_HOLDER.get();
}
/**
* 清理当前线程保存的租户ID防止线程复用导致的租户串用。
*/
public static void clear() {
TENANT_ID_HOLDER.remove();
}
}