mirror of
				https://github.com/dromara/RuoYi-Vue-Plus.git
				synced 2025-11-04 08:13:44 +08:00 
			
		
		
		
	多数据源替换成dynamic-datasource
This commit is contained in:
		
							
								
								
									
										9
									
								
								pom.xml
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								pom.xml
									
									
									
									
									
								
							@@ -30,6 +30,7 @@
 | 
			
		||||
        <feign-okhttp.version>11.0</feign-okhttp.version>
 | 
			
		||||
        <spring-boot-admin.version>2.4.1</spring-boot-admin.version>
 | 
			
		||||
        <redisson.version>3.15.2</redisson.version>
 | 
			
		||||
        <datasource.version>3.4.0</datasource.version>
 | 
			
		||||
    </properties>
 | 
			
		||||
 | 
			
		||||
    <!-- 依赖声明 -->
 | 
			
		||||
@@ -79,6 +80,13 @@
 | 
			
		||||
                <version>${jwt.version}</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
 | 
			
		||||
            <!-- dynamic-datasource 多数据源-->
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>com.baomidou</groupId>
 | 
			
		||||
                <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
 | 
			
		||||
                <version>${datasource.version}</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>com.baomidou</groupId>
 | 
			
		||||
                <artifactId>mybatis-plus-boot-starter</artifactId>
 | 
			
		||||
@@ -89,6 +97,7 @@
 | 
			
		||||
                <artifactId>mybatis-plus-extension</artifactId>
 | 
			
		||||
                <version>${mybatis-plus.version}</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>cn.hutool</groupId>
 | 
			
		||||
                <artifactId>hutool-all</artifactId>
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,6 @@ package com.ruoyi;
 | 
			
		||||
 | 
			
		||||
import org.springframework.boot.SpringApplication;
 | 
			
		||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
 | 
			
		||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 启动程序
 | 
			
		||||
@@ -10,7 +9,7 @@ import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
 | 
			
		||||
@SpringBootApplication
 | 
			
		||||
public class RuoYiApplication
 | 
			
		||||
{
 | 
			
		||||
    public static void main(String[] args)
 | 
			
		||||
 
 | 
			
		||||
@@ -1,21 +1,24 @@
 | 
			
		||||
# 数据源配置
 | 
			
		||||
spring:
 | 
			
		||||
  autoconfigure:
 | 
			
		||||
    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
 | 
			
		||||
  datasource:
 | 
			
		||||
    type: com.alibaba.druid.pool.DruidDataSource
 | 
			
		||||
    driverClassName: com.mysql.cj.jdbc.Driver
 | 
			
		||||
    dynamic:
 | 
			
		||||
      datasource:
 | 
			
		||||
        # 主库数据源
 | 
			
		||||
        master:
 | 
			
		||||
          driverClassName: com.mysql.cj.jdbc.Driver
 | 
			
		||||
          url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
 | 
			
		||||
          username: root
 | 
			
		||||
          password: root
 | 
			
		||||
        # 从库数据源
 | 
			
		||||
        slave:
 | 
			
		||||
          driverClassName: com.mysql.cj.jdbc.Driver
 | 
			
		||||
          url:
 | 
			
		||||
          username:
 | 
			
		||||
          password:
 | 
			
		||||
    druid:
 | 
			
		||||
      # 主库数据源
 | 
			
		||||
      master:
 | 
			
		||||
        url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
 | 
			
		||||
        username: root
 | 
			
		||||
        password: root
 | 
			
		||||
      # 从库数据源
 | 
			
		||||
      slave:
 | 
			
		||||
        # 从数据源开关/默认关闭
 | 
			
		||||
        enabled: false
 | 
			
		||||
        url:
 | 
			
		||||
        username:
 | 
			
		||||
        password:
 | 
			
		||||
      # 初始连接数
 | 
			
		||||
      initialSize: 5
 | 
			
		||||
      # 最小连接池数量
 | 
			
		||||
@@ -35,6 +38,8 @@ spring:
 | 
			
		||||
      testWhileIdle: true
 | 
			
		||||
      testOnBorrow: false
 | 
			
		||||
      testOnReturn: false
 | 
			
		||||
      # 注意这个值和druid原生不一致,默认启动了stat
 | 
			
		||||
      filters: stat
 | 
			
		||||
      webStatFilter:
 | 
			
		||||
        enabled: true
 | 
			
		||||
      statViewServlet:
 | 
			
		||||
 
 | 
			
		||||
@@ -1,21 +1,24 @@
 | 
			
		||||
# 数据源配置
 | 
			
		||||
spring:
 | 
			
		||||
  autoconfigure:
 | 
			
		||||
    exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
 | 
			
		||||
  datasource:
 | 
			
		||||
    type: com.alibaba.druid.pool.DruidDataSource
 | 
			
		||||
    driverClassName: com.mysql.cj.jdbc.Driver
 | 
			
		||||
    dynamic:
 | 
			
		||||
      datasource:
 | 
			
		||||
        # 主库数据源
 | 
			
		||||
        master:
 | 
			
		||||
          driverClassName: com.mysql.cj.jdbc.Driver
 | 
			
		||||
          url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
 | 
			
		||||
          username: root
 | 
			
		||||
          password: root
 | 
			
		||||
        # 从库数据源
 | 
			
		||||
        slave:
 | 
			
		||||
          driverClassName: com.mysql.cj.jdbc.Driver
 | 
			
		||||
          url:
 | 
			
		||||
          username:
 | 
			
		||||
          password:
 | 
			
		||||
    druid:
 | 
			
		||||
      # 主库数据源
 | 
			
		||||
      master:
 | 
			
		||||
        url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true
 | 
			
		||||
        username: root
 | 
			
		||||
        password: root
 | 
			
		||||
      # 从库数据源
 | 
			
		||||
      slave:
 | 
			
		||||
        # 从数据源开关/默认关闭
 | 
			
		||||
        enabled: false
 | 
			
		||||
        url:
 | 
			
		||||
        username:
 | 
			
		||||
        password:
 | 
			
		||||
      # 初始连接数
 | 
			
		||||
      initialSize: 5
 | 
			
		||||
      # 最小连接池数量
 | 
			
		||||
@@ -35,6 +38,8 @@ spring:
 | 
			
		||||
      testWhileIdle: true
 | 
			
		||||
      testOnBorrow: false
 | 
			
		||||
      testOnReturn: false
 | 
			
		||||
      # 注意这个值和druid原生不一致,默认启动了stat
 | 
			
		||||
      filters: stat
 | 
			
		||||
      webStatFilter:
 | 
			
		||||
        enabled: true
 | 
			
		||||
      statViewServlet:
 | 
			
		||||
@@ -58,7 +63,7 @@ spring:
 | 
			
		||||
  # redis 配置
 | 
			
		||||
  redis:
 | 
			
		||||
    # 地址
 | 
			
		||||
    host: 192.168.0.222
 | 
			
		||||
    host: localhost
 | 
			
		||||
    # 端口,默认为6379
 | 
			
		||||
    port: 6379
 | 
			
		||||
    # 数据库索引
 | 
			
		||||
 
 | 
			
		||||
@@ -1,26 +0,0 @@
 | 
			
		||||
package com.ruoyi.framework.datasource;
 | 
			
		||||
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import javax.sql.DataSource;
 | 
			
		||||
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 动态数据源
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class DynamicDataSource extends AbstractRoutingDataSource
 | 
			
		||||
{
 | 
			
		||||
    public DynamicDataSource(DataSource defaultTargetDataSource, Map<Object, Object> targetDataSources)
 | 
			
		||||
    {
 | 
			
		||||
        super.setDefaultTargetDataSource(defaultTargetDataSource);
 | 
			
		||||
        super.setTargetDataSources(targetDataSources);
 | 
			
		||||
        super.afterPropertiesSet();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected Object determineCurrentLookupKey()
 | 
			
		||||
    {
 | 
			
		||||
        return DynamicDataSourceContextHolder.getDataSourceType();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -1,45 +0,0 @@
 | 
			
		||||
package com.ruoyi.framework.datasource;
 | 
			
		||||
 | 
			
		||||
import org.slf4j.Logger;
 | 
			
		||||
import org.slf4j.LoggerFactory;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 数据源切换处理
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class DynamicDataSourceContextHolder
 | 
			
		||||
{
 | 
			
		||||
    public static final Logger log = LoggerFactory.getLogger(DynamicDataSourceContextHolder.class);
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 使用ThreadLocal维护变量,ThreadLocal为每个使用该变量的线程提供独立的变量副本,
 | 
			
		||||
     *  所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。
 | 
			
		||||
     */
 | 
			
		||||
    private static final ThreadLocal<String> CONTEXT_HOLDER = new ThreadLocal<>();
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 设置数据源的变量
 | 
			
		||||
     */
 | 
			
		||||
    public static void setDataSourceType(String dsType)
 | 
			
		||||
    {
 | 
			
		||||
        log.info("切换到{}数据源", dsType);
 | 
			
		||||
        CONTEXT_HOLDER.set(dsType);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得数据源的变量
 | 
			
		||||
     */
 | 
			
		||||
    public static String getDataSourceType()
 | 
			
		||||
    {
 | 
			
		||||
        return CONTEXT_HOLDER.get();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 清空数据源变量
 | 
			
		||||
     */
 | 
			
		||||
    public static void clearDataSourceType()
 | 
			
		||||
    {
 | 
			
		||||
        CONTEXT_HOLDER.remove();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user