From 791b8c88d67767c9847c7c052faca3e65ec36016 Mon Sep 17 00:00:00 2001 From: zhaowenxuan <chacca165@163.com> Date: 星期五, 07 二月 2025 13:59:27 +0800 Subject: [PATCH] 配置动态切库类以及拦截器切库 --- ltkj-hosp/src/main/java/com/ltkj/db/DataSourceConfig.java | 73 ++++++++++++++++++++++-------------- 1 files changed, 45 insertions(+), 28 deletions(-) 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 9d24863..6656298 100644 --- a/ltkj-hosp/src/main/java/com/ltkj/db/DataSourceConfig.java +++ b/ltkj-hosp/src/main/java/com/ltkj/db/DataSourceConfig.java @@ -1,47 +1,49 @@ package com.ltkj.db; import com.alibaba.druid.pool.DruidDataSource; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; import java.util.HashMap; import java.util.Map; +import java.util.Properties; -//@Configuration +@Configuration public class DataSourceConfig { - - // 浣跨敤浠g爜 -// try { -// long id = Long.parseLong(request.getAttribute("id").toString()); -// DataSourceContextHolder.setDataSourceKey(String.valueOf(id)); -// dataSourceConfig.addDataSource(String.valueOf(id)); // 纭繚鏁版嵁婧愬凡娉ㄥ唽 -// if (log.getSize()>50) log.setSize(50); -// if (log.getLang().equals("zh-cn")) log.setLang("zh"); -// return serverLogService.getLog(log,id); -// }finally { -// DataSourceContextHolder.setDataSourceKey("default"); // 鍒囨崲鍥炰富搴� -// } private static final String DEFAULT_DATA_SOURCE_KEY = "default"; // 涓诲簱鐨勬爣璇� private final Map<String, DataSource> dataSourceCache = new HashMap<>(); // 鏁版嵁婧愮紦瀛� + @Value("${config.properties}") + private String url; + + @Value("${config.path}") + private String path; + // 浠� application.yml 涓鍙栦富搴撶殑閰嶇疆 - @Value("${spring.datasource.url}") +// @Value("${spring.datasource.url}") private String primaryUrl; - @Value("${spring.datasource.username}") + private String primaryPort; + + // @Value("${spring.datasource.username}") private String primaryUsername; - @Value("${spring.datasource.password}") + // @Value("${spring.datasource.password}") private String primaryPassword; - @Value("${dbUrl}") + // @Value("${dbUrl}") private String dbUrl; - @Bean - public DataSource dynamicDataSource() { - DynamicDataSource dynamicDataSource = new DynamicDataSource(); + @Bean(name = "hospDynamicDataSources") + public DataSource hospDynamicDataSources() { + HospDynamicDataSource dynamicDataSource = new HospDynamicDataSource(); // 鍒濆鍖栭粯璁ゆ暟鎹簮涓轰富搴� dynamicDataSource.addTargetDataSource(DEFAULT_DATA_SOURCE_KEY, createDataSource(primaryUrl, primaryUsername, primaryPassword)); @@ -60,15 +62,30 @@ } // 鏍规嵁鐢ㄦ埛 ID 鍔ㄦ�佽幏鍙栨暟鎹簮 - public void addDataSource(String userId) { - String dbName = "scum_admin_user_" + userId; + 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(userId)) { - String url = "jdbc:mysql://"+dbUrl+":3306/"+dbName; - DataSource dataSource = createDataSource(url, primaryUsername, primaryPassword); - dataSourceCache.put(userId, dataSource); - DynamicDataSource dynamicDataSource = (DynamicDataSource) dynamicDataSource(); - dynamicDataSource.addTargetDataSource(userId, dataSource); + if (!dataSourceCache.containsKey(dbName)) { + synchronized (this) { + String url = "jdbc:mysql://" + dbUrl + ":" + primaryPort + "/" + dbName; + DataSource dataSource = createDataSource(url, primaryUsername, primaryPassword); + dataSourceCache.put(dbName, dataSource); + HospDynamicDataSource dynamicDataSource = (HospDynamicDataSource) hospDynamicDataSources(); + dynamicDataSource.addTargetDataSource(dbName, dataSource); + } } } } -- Gitblit v1.8.0