多租户代码框架
This commit is contained in:
50
src/main/java/com/rj/tenant/TenantContextHolder.java
Normal file
50
src/main/java/com/rj/tenant/TenantContextHolder.java
Normal 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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user