From 73281b8a7ff42a36658dfab1721f67275d76ef4a Mon Sep 17 00:00:00 2001 From: dftre <3066417822@qq.com> Date: Sun, 20 Oct 2024 08:59:28 +0800 Subject: [PATCH] =?UTF-8?q?feat(datasource):=20=E5=AE=9E=E7=8E=B0=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E6=BA=90=E5=88=87=E6=8D=A2=E7=9A=84=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E5=AE=89=E5=85=A8=E5=92=8C=E7=A8=B3=E5=AE=9A=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 重构 DynamicDataSourceContextHolder 类,使用 Stack 结构管理数据源类型 - 优化代码结构,提高可读性和可维护性 --- .../DynamicDataSourceContextHolder.java | 41 +++++++++++++------ 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSourceContextHolder.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSourceContextHolder.java index 3572db9..e287645 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSourceContextHolder.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/datasource/DynamicDataSourceContextHolder.java @@ -1,5 +1,8 @@ package com.ruoyi.framework.datasource; +import java.util.Objects; +import java.util.Stack; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -8,38 +11,50 @@ import org.slf4j.LoggerFactory; * * @author ruoyi */ -public class DynamicDataSourceContextHolder -{ +public class DynamicDataSourceContextHolder { public static final Logger log = LoggerFactory.getLogger(DynamicDataSourceContextHolder.class); /** * 使用ThreadLocal维护变量,ThreadLocal为每个使用该变量的线程提供独立的变量副本, - * 所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。 + * 所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。 */ - private static final ThreadLocal CONTEXT_HOLDER = new ThreadLocal<>(); + private static final ThreadLocal> CONTEXT_HOLDER = new ThreadLocal<>(); /** * 设置数据源的变量 */ - public static void setDataSourceType(String dsType) - { + public static void setDataSourceType(String dsType) { log.info("切换到{}数据源", dsType); - CONTEXT_HOLDER.set(dsType); + Stack stack = CONTEXT_HOLDER.get(); + if (Objects.isNull(stack)) { + stack = new Stack<>(); + CONTEXT_HOLDER.set(stack); + } + stack.push(dsType); } /** * 获得数据源的变量 */ - public static String getDataSourceType() - { - return CONTEXT_HOLDER.get(); + public static String getDataSourceType() { + Stack stack = CONTEXT_HOLDER.get(); + if (Objects.isNull(stack)) { + return null; + } else { + return stack.peek(); + } } /** * 清空数据源变量 */ - public static void clearDataSourceType() - { - CONTEXT_HOLDER.remove(); + public static void clearDataSourceType() { + Stack stack = CONTEXT_HOLDER.get(); + if (Objects.nonNull(stack) && !stack.isEmpty()) { + stack.pop(); + if (stack.isEmpty()) { + CONTEXT_HOLDER.remove(); + } + } } }