From 59972ce8f9128858866c17655fc2d034d023b976 Mon Sep 17 00:00:00 2001
From: zjh <1084500556@qq.com>
Date: 星期五, 07 二月 2025 17:33:15 +0800
Subject: [PATCH] zjh20250207

---
 ltkj-hosp/src/main/java/com/ltkj/db/DataSourceConfig.java                            |    2 
 ltkj-hosp/src/main/java/com/ltkj/db/HospDynamicDataSource.java                       |    4 -
 ltkj-framework/src/main/java/com/ltkj/framework/interceptor/DBChangeInterceptor.java |    8 ++
 ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/LtkjExamJcsqdServiceImpl.java     |    2 
 ltkj-framework/src/main/java/com/ltkj/framework/datasource/DynamicDataSource.java    |   21 ++++++
 ltkj-framework/src/main/java/com/ltkj/framework/config/DruidConfig.java              |   92 ++++++++++++++++++++++++++++--
 6 files changed, 113 insertions(+), 16 deletions(-)

diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/config/DruidConfig.java b/ltkj-framework/src/main/java/com/ltkj/framework/config/DruidConfig.java
index a3924ad..df79300 100644
--- a/ltkj-framework/src/main/java/com/ltkj/framework/config/DruidConfig.java
+++ b/ltkj-framework/src/main/java/com/ltkj/framework/config/DruidConfig.java
@@ -5,7 +5,6 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
-import javax.annotation.Resource;
 import javax.servlet.Filter;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
@@ -14,14 +13,12 @@
 import javax.servlet.ServletResponse;
 import javax.sql.DataSource;
 
+import com.ltkj.db.HospDynamicDataSource;
 import com.ltkj.framework.config.properties.DruidProperties;
 import com.ltkj.framework.datasource.DynamicDataSource;
-import com.ltkj.system.service.ISysConfigService;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.web.servlet.FilterRegistrationBean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -48,6 +45,28 @@
 
     @Value ("${config.path}")
     private  String path;
+
+
+    private static final String DEFAULT_DATA_SOURCE_KEY = "default"; // 涓诲簱鐨勬爣璇�
+    private final Map<String, DataSource> dataSourceCache = new HashMap<>(); // 鏁版嵁婧愮紦瀛�
+
+
+    // 浠� application.yml 涓鍙栦富搴撶殑閰嶇疆
+//    @Value("${spring.datasource.url}")
+    private String primaryUrl;
+
+    private String primaryPort;
+
+    //    @Value("${spring.datasource.username}")
+    private String primaryUsername;
+
+    //    @Value("${spring.datasource.password}")
+    private String primaryPassword;
+
+    //    @Value("${dbUrl}")
+    private String dbUrl;
+
+    private String dbName;
 
 
     @Bean
@@ -259,8 +278,6 @@
         return druidProperties.dataSource(dataSource);
     }
 
-
-
     @Bean
 //    @ConfigurationProperties("spring.datasource.druid.slavepacs")
 //    @ConditionalOnProperty(prefix = "spring.datasource.druid.slavepacs", name = "enabled", havingValue = "true")
@@ -346,6 +363,69 @@
         return dataSource;
     }
 
+//    @Bean(name = "hospDynamicDataSources")
+//    public DataSource hospDynamicDataSources() {
+//        HospDynamicDataSource dynamicDataSource = new HospDynamicDataSource();
+//        FileInputStream fis = null;
+//        Properties props = new Properties();
+//        try {
+//            fis = new FileInputStream(url);
+//            props.load(fis);
+//            fis.close();
+//            dbUrl = props.getProperty("ip");
+//            dbName = props.getProperty("name");
+//            primaryPassword = props.getProperty("password");
+//            primaryPort = props.getProperty("prot");
+//            primaryUsername = props.getProperty("username");
+//        } catch (IOException e) {
+//            throw new RuntimeException("璇诲彇閰嶇疆鏂囦欢澶辫触", e);
+//        }
+//        String url = "jdbc:mysql://" + dbUrl + ":" + primaryPort + "/" + dbName;
+//        // 鍒濆鍖栭粯璁ゆ暟鎹簮涓轰富搴�
+//        dynamicDataSource.addTargetDataSource(DEFAULT_DATA_SOURCE_KEY, createDataSource(url, primaryUsername, primaryPassword));
+//
+//        dynamicDataSource.setDefaultTargetDataSource(dynamicDataSource.getTargetDataSources().get(DEFAULT_DATA_SOURCE_KEY)); // 璁剧疆榛樿鏁版嵁婧�
+//        return dynamicDataSource;
+//    }
+
+    // 鏍规嵁鐢ㄦ埛 ID 鍔ㄦ�佽幏鍙栨暟鎹簮
+    public void addDataSource(String dbName) {
+        FileInputStream fis = null;
+        Properties props = new Properties();
+        try {
+            fis = new FileInputStream(url);
+            props.load(fis);
+            fis.close();
+            dbUrl = props.getProperty("ip");
+            primaryPassword = props.getProperty("password");
+            primaryPort = props.getProperty("prot");
+            primaryUsername = props.getProperty("username");
+        } catch (IOException e) {
+            throw new RuntimeException("璇诲彇閰嶇疆鏂囦欢澶辫触", e);
+        }
+
+        // 妫�鏌ョ紦瀛樹腑鏄惁宸茬粡瀛樺湪璇ユ暟鎹簮
+        if (!dataSourceCache.containsKey(dbName)) {
+            synchronized (this) {
+                String url = "jdbc:mysql://" + dbUrl + ":" + primaryPort + "/" + dbName;
+                DataSource dataSource = createDataSource(url, primaryUsername, primaryPassword);
+                dataSourceCache.put(dbName, dataSource);
+
+                DynamicDataSource dynamicDataSource = dataSource(dataSource);
+                dynamicDataSource.addTargetDataSource(dbName, dataSource);
+            }
+        }
+    }
+
+    // 鍔ㄦ�佸垱寤烘暟鎹簮
+    private DataSource createDataSource(String url, String username, String password) {
+        DruidDataSource dataSource = new DruidDataSource();
+        dataSource.setUrl(url);
+        dataSource.setUsername(username);
+        dataSource.setPassword(password);
+        return dataSource;
+    }
+
 
     @Bean(name = "dynamicDataSource")
     @Primary
diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/datasource/DynamicDataSource.java b/ltkj-framework/src/main/java/com/ltkj/framework/datasource/DynamicDataSource.java
index b82b6dc..d3e53c1 100644
--- a/ltkj-framework/src/main/java/com/ltkj/framework/datasource/DynamicDataSource.java
+++ b/ltkj-framework/src/main/java/com/ltkj/framework/datasource/DynamicDataSource.java
@@ -1,6 +1,7 @@
 package com.ltkj.framework.datasource;
 
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 import javax.sql.DataSource;
 
 import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
@@ -11,6 +12,7 @@
  * @author ltkj
  */
 public class DynamicDataSource extends AbstractRoutingDataSource {
+    private final Map<Object, Object> targetDataSources = new ConcurrentHashMap<>(); // 瀛樺偍鎵�鏈夋暟鎹簮
     public DynamicDataSource(DataSource defaultTargetDataSource, Map<Object, Object> targetDataSources) {
         super.setDefaultTargetDataSource(defaultTargetDataSource);
         super.setTargetDataSources(targetDataSources);
@@ -19,6 +21,23 @@
 
     @Override
     protected Object determineCurrentLookupKey() {
+        System.out.println("褰撳墠鏁版嵁婧� -> "+ DynamicDataSourceContextHolder.getDataSourceType());
         return DynamicDataSourceContextHolder.getDataSourceType();
     }
-}
\ No newline at end of file
+
+    public void addTargetDataSource(String key, DataSource dataSource) {
+        targetDataSources.put(key, dataSource);
+        super.setTargetDataSources(new ConcurrentHashMap<>(targetDataSources)); // 鏇存柊鐩爣鏁版嵁婧�
+        super.afterPropertiesSet(); // 閲嶆柊鍒濆鍖栨暟鎹簮
+    }
+
+    // 鍏佽澶栭儴璁块棶鎵�鏈夌洰鏍囨暟鎹簮
+    @Override
+    public void setTargetDataSources(Map<Object, Object> targetDataSources) {
+        super.setTargetDataSources(targetDataSources);
+    }
+
+    public Map<Object, Object> getTargetDataSources() {
+        return targetDataSources; // 鑾峰彇鎵�鏈夌洰鏍囨暟鎹簮
+    }
+}
diff --git a/ltkj-framework/src/main/java/com/ltkj/framework/interceptor/DBChangeInterceptor.java b/ltkj-framework/src/main/java/com/ltkj/framework/interceptor/DBChangeInterceptor.java
index ee96596..a049f69 100644
--- a/ltkj-framework/src/main/java/com/ltkj/framework/interceptor/DBChangeInterceptor.java
+++ b/ltkj-framework/src/main/java/com/ltkj/framework/interceptor/DBChangeInterceptor.java
@@ -6,6 +6,7 @@
 import com.google.gson.Gson;
 import com.ltkj.db.DataSourceConfig;
 import com.ltkj.db.DataSourceContextHolder;
+import com.ltkj.framework.config.DruidConfig;
 import com.ltkj.hosp.domain.DictHosp;
 import com.ltkj.hosp.service.IDictHospService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -28,8 +29,10 @@
 
     @Autowired
     private IDictHospService dictHospService;
+//    @Autowired
+//    private DataSourceConfig dataSourceConfig;
     @Autowired
-    private DataSourceConfig dataSourceConfig;
+    private DruidConfig druidConfig;
 
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
@@ -52,7 +55,8 @@
                 response.getWriter().write("{\"message\":\"401锛氭壘涓嶅埌闄㈠尯鏁版嵁\"}");
                 return false;
             }
-            dataSourceConfig.addDataSource(hosp.getDbname());
+//            dataSourceConfig.addDataSource(hosp.getDbname());
+            druidConfig.addDataSource(hosp.getDbname());
             DataSourceContextHolder.setDataSourceKey(hosp.getDbname());
         } catch (IOException e) {
             return false;
diff --git a/ltkj-hosp/src/main/java/com/ltkj/db/DataSourceConfig.java b/ltkj-hosp/src/main/java/com/ltkj/db/DataSourceConfig.java
index f57d7d6..8d5d828 100644
--- a/ltkj-hosp/src/main/java/com/ltkj/db/DataSourceConfig.java
+++ b/ltkj-hosp/src/main/java/com/ltkj/db/DataSourceConfig.java
@@ -14,7 +14,7 @@
 import java.util.Map;
 import java.util.Properties;
 
-@Configuration
+//@Configuration
 public class DataSourceConfig {
 
     private static final String DEFAULT_DATA_SOURCE_KEY = "default"; // 涓诲簱鐨勬爣璇�
diff --git a/ltkj-hosp/src/main/java/com/ltkj/db/HospDynamicDataSource.java b/ltkj-hosp/src/main/java/com/ltkj/db/HospDynamicDataSource.java
index 1cd8baa..06267f4 100644
--- a/ltkj-hosp/src/main/java/com/ltkj/db/HospDynamicDataSource.java
+++ b/ltkj-hosp/src/main/java/com/ltkj/db/HospDynamicDataSource.java
@@ -1,11 +1,7 @@
 package com.ltkj.db;
 
-import org.springframework.context.annotation.Bean;
 import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
-import org.springframework.stereotype.Component;
-
 import javax.sql.DataSource;
-import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
diff --git a/ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/LtkjExamJcsqdServiceImpl.java b/ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/LtkjExamJcsqdServiceImpl.java
index 6182d21..9ad309e 100644
--- a/ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/LtkjExamJcsqdServiceImpl.java
+++ b/ltkj-hosp/src/main/java/com/ltkj/hosp/service/impl/LtkjExamJcsqdServiceImpl.java
@@ -37,8 +37,6 @@
     private LtkjExamJcsqdMapper mapper;
 
     @Qualifier(value = "slaveHisDataSource")
-    @Autowired
-    private DataSource dataSource;
 
 
     @Override

--
Gitblit v1.8.0