From 946162009197878b50270665e5774815cfecd60c Mon Sep 17 00:00:00 2001 From: lbw Date: Fri, 24 Jun 2022 22:23:06 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20Introducing=20new=20features.=20cl?= =?UTF-8?q?ose=20#4057=20=E7=A7=9F=E6=88=B7=E8=BF=87=E6=BB=A4=E6=9D=A1?= =?UTF-8?q?=E6=8F=90=E4=BE=9B=20tenantSkip=20TTL=20=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/data/tenant/PigxTenantHandler.java | 5 +++++ .../data/tenant/TenantContextHolder.java | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxTenantHandler.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxTenantHandler.java index f92f92c88..03aac7150 100644 --- a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxTenantHandler.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/PigxTenantHandler.java @@ -70,6 +70,11 @@ public class PigxTenantHandler implements TenantLineHandler { */ @Override public boolean ignoreTable(String tableName) { + // 判断是否跳过当前查询的租户过滤 + if (TenantContextHolder.getTenantSkip()) { + return Boolean.TRUE; + } + Long tenantId = TenantContextHolder.getTenantId(); // 租户中ID 为空,查询全部,不进行过滤 if (tenantId == null) { diff --git a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantContextHolder.java b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantContextHolder.java index c7363ac72..79b2527af 100644 --- a/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantContextHolder.java +++ b/pigx-common/pigx-common-data/src/main/java/com/pig4cloud/pigx/common/data/tenant/TenantContextHolder.java @@ -29,6 +29,8 @@ public class TenantContextHolder { private final ThreadLocal THREAD_LOCAL_TENANT = new TransmittableThreadLocal<>(); + private final ThreadLocal THREAD_LOCAL_TENANT_SKIP_FLAG = new TransmittableThreadLocal<>(); + /** * TTL 设置租户ID
* 谨慎使用此方法,避免嵌套调用。尽量使用 {@code TenantBroker} @@ -39,6 +41,13 @@ public class TenantContextHolder { THREAD_LOCAL_TENANT.set(tenantId); } + /** + * 设置是否过滤的标识 + */ + public void setTenantSkip() { + THREAD_LOCAL_TENANT_SKIP_FLAG.set(Boolean.TRUE); + } + /** * 获取TTL中的租户ID * @return @@ -47,8 +56,17 @@ public class TenantContextHolder { return THREAD_LOCAL_TENANT.get(); } + /** + * 获取是否跳过租户过滤的标识 + * @return + */ + public Boolean getTenantSkip() { + return THREAD_LOCAL_TENANT_SKIP_FLAG.get() != null && THREAD_LOCAL_TENANT_SKIP_FLAG.get(); + } + public void clear() { THREAD_LOCAL_TENANT.remove(); + THREAD_LOCAL_TENANT_SKIP_FLAG.remove(); } }