瀏覽代碼

优化模块

ZhouChenglin 7 年之前
父節點
當前提交
3dd4a9c28c

+ 52 - 0
src/main/java/net/chenlin/dp/common/support/orm/db/DataSourceEnum.java

@@ -0,0 +1,52 @@
+package net.chenlin.dp.common.support.orm.db;
+
+/**
+ * 数据源上下文
+ * @author ZhouChenglin
+ * @date 2017/12/25
+ */
+public enum DataSourceEnum {
+
+    MASTER("masterDataSource", true),
+
+    SLAVE("slaveDataSource", false);
+
+    private String name;
+
+    private boolean master;
+
+    DataSourceEnum(String name, boolean master) {
+        this.name = name;
+        this.master = master;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public boolean isMaster() {
+        return master;
+    }
+
+    public void setMaster(boolean master) {
+        this.master = master;
+    }
+
+    public String getDefault() {
+        String defaultDataSource = "";
+        for (DataSourceEnum dataSourceEnum : DataSourceEnum.values()) {
+            if (!"".equals(defaultDataSource)) {
+                break;
+            }
+            if (dataSourceEnum.master) {
+                defaultDataSource = dataSourceEnum.getName();
+            }
+        }
+        return defaultDataSource;
+    }
+
+}

+ 61 - 0
src/main/java/net/chenlin/dp/common/support/orm/db/DynamicDataSource.java

@@ -0,0 +1,61 @@
+package net.chenlin.dp.common.support.orm.db;
+
+import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
+
+import javax.sql.DataSource;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 动态数据源
+ * @author ZhouChenglin
+ * @date 2017/12/25
+ */
+public class DynamicDataSource extends AbstractRoutingDataSource {
+
+    private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>();
+
+    public DynamicDataSource(DataSource defaultTargetDataSource, Map<String, DataSource> targetDataSources) {
+        super.setDefaultTargetDataSource(defaultTargetDataSource);
+        super.setTargetDataSources(new HashMap<>(targetDataSources));
+        super.afterPropertiesSet();
+    }
+
+    @Override
+    protected Object determineCurrentLookupKey() {
+        String currDataSource = getDataSource();
+        return currDataSource;
+    }
+
+    /**
+     * 设置数据源
+     *
+     * @param dataSource
+     */
+    public static void setDataSource(String dataSource) {
+        CONTEXT_HOLDER.set(dataSource);
+    }
+
+    /**
+     * 获取数据源
+     *
+     * @return
+     */
+    public static String getDataSource() {
+        String dataSource = CONTEXT_HOLDER.get();
+        // 如果没有指定数据源,使用默认数据源
+        if (null == dataSource) {
+            DynamicDataSource.setDataSource(DataSourceEnum.MASTER.getDefault());
+        }
+        return CONTEXT_HOLDER.get();
+    }
+
+    /**
+     * 清除数据源
+     */
+    public static void clearDataSource() {
+        CONTEXT_HOLDER.remove();
+    }
+
+
+}