|
@@ -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();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|