ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
``` /** * @author 张跃帅 * @Description: 数据源操作-工具类 * @date 2020/08/12 */ public class DatasourceUtil { /** * 通用的数据源 */ private static final DataSource commonDb = SpringUtil.getBean(DataSource.class); /** * 主数据源-客户端 */ private static final MasterDbClient masterDbClient = SpringUtil.getBean(MasterDbClient.class); /** * 获取-当前使用中-数据源 */ public static DataSource getCurrDb() { // 动态路由数据源 DynamicRoutingDataSource commDb = (DynamicRoutingDataSource) commonDb; // 获取数据源 return commDb.determineDataSource(); } /** * 获取-当前使用中-数据源名称 */ public static String getCurrDbName() { // 获取当前线程数据源名称 return DynamicDataSourceContextHolder.peek(); } /** * 切换-主数据源 */ public static void changeMasterDb() { /** * 强制清空本地线程 * 备注:当强制清空本地线程后,会自动使用默认数据源,默认数据源就是主库 */ DynamicDataSourceContextHolder.clear(); } /** * 切换-指定数据源 */ public static void changeDb(String dbName) { // 判断 if (StrUtil.isNotBlank(dbName)) { // 切换-目标数据源 DynamicDataSourceContextHolder.push(dbName); } } /** * 获取-主数据源名称 */ public static String getMasterDbName() { // 获取主数据源URL String masterDbUrl = masterDbClient.getUrl(); // 变量-数据源名称 String dbName = null; // 判断 if (StrUtil.isNotBlank(masterDbUrl)) { // 判断-数据源类型 if (masterDbUrl.contains(DbTypeEnum.MYSQL.getCode())) { // 定义正则表达式 Pattern pattern = Pattern.compile("jdbc:(?<db>\\w+):.*((//)|@)(?<host>.+):(?<port>\\d+)(/|(;DatabaseName=)|:)(?<dbName>\\w+)\\??.*"); // 匹配 Matcher matcher = pattern.matcher(masterDbUrl); // 判断 if (matcher.find()) { // 获取-数据源名称 dbName = matcher.group("dbName"); } } } // 返回 return dbName; } /** * 获取-指定的数据源 */ public static DataSource getDbByDbName(String dbName) { // 判断 if (StrUtil.isNotBlank(dbName)) { // 动态路由数据源 DynamicRoutingDataSource commDb = (DynamicRoutingDataSource) commonDb; // 返回-数据源 return commDb.getDataSource(dbName); } // 返回 return null; } /** * 获取-所有的数据源名称 */ public static List<String> getAllDbName() { // 变量创建ArrayList List<String> dbNameList = CollectionUtil.newArrayList(); // 动态路由数据源 DynamicRoutingDataSource commDb = (DynamicRoutingDataSource) commonDb; // 获取Bean中所有数据源 Set<String> dbNameArray = commDb.getDataSources().keySet(); // 遍历 for (String dbName : dbNameArray) { // 获取Bean中数据源名称 String beanDbName = dbName.toString(); // 添加到List dbNameList.add(beanDbName); } // 返回 return dbNameList; } }