From e2af80fe2a05f53785af5499ac6670565553dbce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=E5=98=89=E9=98=B3?= Date: Sat, 29 Feb 2020 17:15:19 +0800 Subject: [PATCH] =?UTF-8?q?Spring=E5=88=86=E5=BA=93=E4=BB=A3=E7=90=86?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../proxy/db/DataSourceContextHolder.java | 34 ++++++ .../proxy/db/DynamicDataSource.java | 106 ++++++++++++++++++ 2 files changed, 140 insertions(+) create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/structural/proxy/db/DataSourceContextHolder.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/structural/proxy/db/DynamicDataSource.java diff --git a/src/main/java/top/fjy8018/designpattern/pattern/structural/proxy/db/DataSourceContextHolder.java b/src/main/java/top/fjy8018/designpattern/pattern/structural/proxy/db/DataSourceContextHolder.java new file mode 100644 index 0000000..e8392af --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/structural/proxy/db/DataSourceContextHolder.java @@ -0,0 +1,34 @@ +package top.fjy8018.designpattern.pattern.structural.proxy.db; + +/** + * 数据源上下文 + * + * @author F嘉阳 + * @date 2020/2/29 16:27 + */ +public class DataSourceContextHolder { + /** + * 存放数据源Bean Name + */ + private static final ThreadLocal CONTEXT_HOLDER = new ThreadLocal<>(); + + /** + * 配置哪个数据库,则动态数据源线程就会获取到哪个数据库 + * + * @param dbType + */ + public static void setDBType(String dbType) { + CONTEXT_HOLDER.set(dbType); + } + + public static String getDBType() { + return CONTEXT_HOLDER.get(); + } + + /** + * 清除,防止内存泄漏 + */ + public static void clear() { + CONTEXT_HOLDER.remove(); + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/structural/proxy/db/DynamicDataSource.java b/src/main/java/top/fjy8018/designpattern/pattern/structural/proxy/db/DynamicDataSource.java new file mode 100644 index 0000000..a85c2e7 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/structural/proxy/db/DynamicDataSource.java @@ -0,0 +1,106 @@ +package top.fjy8018.designpattern.pattern.structural.proxy.db; + +import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; + +/** + * Spring分库实现 + * + * @author F嘉阳 + * @date 2020/2/29 16:26 + */ +public class DynamicDataSource extends AbstractRoutingDataSource { + + /** + * 动态获取数据库 + * + * @return 当前线程所属数据源 + */ + @Override + protected Object determineCurrentLookupKey() { + return DataSourceContextHolder.getDBType(); + } + + +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// + + +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// + + +// +// +// +// +// +// +// +// +// + + +// +// +// +}