From c950daf30171458b1852688e5847b7aefc57aa64 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期二, 22 六月 2021 11:31:27 +0800
Subject: [PATCH] update 优化 多数据源集成 相关pr

---
 /dev/null                                                                       |   55 -------------
 ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java |   75 +++++++-----------
 ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java       |   74 +----------------
 ruoyi-common/pom.xml                                                            |    6 +
 4 files changed, 44 insertions(+), 166 deletions(-)

diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index c55be1c..39c7b8e 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -146,6 +146,12 @@
             <artifactId>redisson-spring-boot-starter</artifactId>
         </dependency>
 
+        <!-- dynamic-datasource 澶氭暟鎹簮-->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
+        </dependency>
+
     </dependencies>
 
 </project>
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java
index f92a964..3167934 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java
@@ -1,15 +1,13 @@
 package com.ruoyi.framework.aspectj;
 
 import cn.hutool.core.lang.Validator;
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
 import com.ruoyi.common.annotation.DataSource;
-import com.ruoyi.framework.datasource.DynamicDataSourceContextHolder;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Pointcut;
 import org.aspectj.lang.reflect.MethodSignature;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.core.annotation.AnnotationUtils;
 import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Component;
@@ -18,56 +16,45 @@
 
 /**
  * 澶氭暟鎹簮澶勭悊
- * 
+ *
  * @author ruoyi
  */
 @Aspect
 @Order(1)
 @Component
-public class DataSourceAspect
-{
-    protected Logger logger = LoggerFactory.getLogger(getClass());
+public class DataSourceAspect {
 
-    @Pointcut("@annotation(com.ruoyi.common.annotation.DataSource)"
-            + "|| @within(com.ruoyi.common.annotation.DataSource)")
-    public void dsPointCut()
-    {
+	@Pointcut("@annotation(com.ruoyi.common.annotation.DataSource)"
+		+ "|| @within(com.ruoyi.common.annotation.DataSource)")
+	public void dsPointCut() {
+	}
 
-    }
+	@Around("dsPointCut()")
+	public Object around(ProceedingJoinPoint point) throws Throwable {
+		DataSource dataSource = getDataSource(point);
 
-    @Around("dsPointCut()")
-    public Object around(ProceedingJoinPoint point) throws Throwable
-    {
-        DataSource dataSource = getDataSource(point);
+		if (Validator.isNotNull(dataSource)) {
+			DynamicDataSourceContextHolder.push(dataSource.value().name());
+		}
 
-        if (Validator.isNotNull(dataSource))
-        {
-            DynamicDataSourceContextHolder.setDataSourceType(dataSource.value().name());
-        }
+		try {
+			return point.proceed();
+		} finally {
+			// 閿�姣佹暟鎹簮 鍦ㄦ墽琛屾柟娉曚箣鍚�
+			DynamicDataSourceContextHolder.clear();
+		}
+	}
 
-        try
-        {
-            return point.proceed();
-        }
-        finally
-        {
-            // 閿�姣佹暟鎹簮 鍦ㄦ墽琛屾柟娉曚箣鍚�
-            DynamicDataSourceContextHolder.clearDataSourceType();
-        }
-    }
+	/**
+	 * 鑾峰彇闇�瑕佸垏鎹㈢殑鏁版嵁婧�
+	 */
+	public DataSource getDataSource(ProceedingJoinPoint point) {
+		MethodSignature signature = (MethodSignature) point.getSignature();
+		DataSource dataSource = AnnotationUtils.findAnnotation(signature.getMethod(), DataSource.class);
+		if (Objects.nonNull(dataSource)) {
+			return dataSource;
+		}
 
-    /**
-     * 鑾峰彇闇�瑕佸垏鎹㈢殑鏁版嵁婧�
-     */
-    public DataSource getDataSource(ProceedingJoinPoint point)
-    {
-        MethodSignature signature = (MethodSignature) point.getSignature();
-        DataSource dataSource = AnnotationUtils.findAnnotation(signature.getMethod(), DataSource.class);
-        if (Objects.nonNull(dataSource))
-        {
-            return dataSource;
-        }
-
-        return AnnotationUtils.findAnnotation(signature.getDeclaringType(), DataSource.class);
-    }
+		return AnnotationUtils.findAnnotation(signature.getDeclaringType(), DataSource.class);
+	}
 }
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java
index 3fab843..735f7e3 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/DruidConfig.java
@@ -1,82 +1,22 @@
 package com.ruoyi.framework.config;
 
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.sql.DataSource;
+import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
+import com.alibaba.druid.util.Utils;
 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;
-import org.springframework.context.annotation.Primary;
-import com.alibaba.druid.pool.DruidDataSource;
-import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
-import com.alibaba.druid.spring.boot.autoconfigure.properties.DruidStatProperties;
-import com.alibaba.druid.util.Utils;
-import com.ruoyi.common.enums.DataSourceType;
-import com.ruoyi.common.utils.spring.SpringUtils;
-import com.ruoyi.framework.config.properties.DruidProperties;
-import com.ruoyi.framework.datasource.DynamicDataSource;
+
+import javax.servlet.*;
+import java.io.IOException;
 
 /**
  * druid 閰嶇疆澶氭暟鎹簮
- * 
+ *
  * @author ruoyi
  */
 @Configuration
-public class DruidConfig
-{
-    @Bean
-    @ConfigurationProperties("spring.datasource.druid.master")
-    public DataSource masterDataSource(DruidProperties druidProperties)
-    {
-        DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
-        return druidProperties.dataSource(dataSource);
-    }
-
-    @Bean
-    @ConfigurationProperties("spring.datasource.druid.slave")
-    @ConditionalOnProperty(prefix = "spring.datasource.druid.slave", name = "enabled", havingValue = "true")
-    public DataSource slaveDataSource(DruidProperties druidProperties)
-    {
-        DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
-        return druidProperties.dataSource(dataSource);
-    }
-
-    @Bean(name = "dynamicDataSource")
-    @Primary
-    public DynamicDataSource dataSource(DataSource masterDataSource)
-    {
-        Map<Object, Object> targetDataSources = new HashMap<>();
-        targetDataSources.put(DataSourceType.MASTER.name(), masterDataSource);
-        setDataSource(targetDataSources, DataSourceType.SLAVE.name(), "slaveDataSource");
-        return new DynamicDataSource(masterDataSource, targetDataSources);
-    }
-    
-    /**
-     * 璁剧疆鏁版嵁婧�
-     * 
-     * @param targetDataSources 澶囬�夋暟鎹簮闆嗗悎
-     * @param sourceName 鏁版嵁婧愬悕绉�
-     * @param beanName bean鍚嶇О
-     */
-    public void setDataSource(Map<Object, Object> targetDataSources, String sourceName, String beanName)
-    {
-        try
-        {
-            DataSource dataSource = SpringUtils.getBean(beanName);
-            targetDataSources.put(sourceName, dataSource);
-        }
-        catch (Exception e)
-        {
-        }
-    }
+public class DruidConfig {
 
     /**
      * 鍘婚櫎鐩戞帶椤甸潰搴曢儴鐨勫箍鍛�
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/DruidProperties.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/DruidProperties.java
deleted file mode 100644
index 03ddc2c..0000000
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/DruidProperties.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.ruoyi.framework.config.properties;
-
-import com.alibaba.druid.pool.DruidDataSource;
-import lombok.Data;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * druid 閰嶇疆灞炴��
- *
- * @author Lion Li
- */
-@Data
-@Configuration
-@ConfigurationProperties(prefix = "spring.datasource.druid")
-public class DruidProperties {
-
-    /** 鍒濆杩炴帴鏁� */
-    private int initialSize;
-    /** 鏈�灏忚繛鎺ユ睜鏁伴噺 */
-    private int minIdle;
-    /** 鏈�澶ц繛鎺ユ睜鏁伴噺 */
-    private int maxActive;
-    /** 閰嶇疆鑾峰彇杩炴帴绛夊緟瓒呮椂鐨勬椂闂� */
-    private int maxWait;
-    /** 閰嶇疆闂撮殧澶氫箙鎵嶈繘琛屼竴娆℃娴嬶紝妫�娴嬮渶瑕佸叧闂殑绌洪棽杩炴帴锛屽崟浣嶆槸姣 */
-    private int timeBetweenEvictionRunsMillis;
-    /** 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�灏忕敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 */
-    private int minEvictableIdleTimeMillis;
-    /** 閰嶇疆涓�涓繛鎺ュ湪姹犱腑鏈�澶х敓瀛樼殑鏃堕棿锛屽崟浣嶆槸姣 */
-    private int maxEvictableIdleTimeMillis;
-    /** 閰嶇疆妫�娴嬭繛鎺ユ槸鍚︽湁鏁� */
-    private String validationQuery;
-    /** 鍒濆杩炴帴鏁� */
-    private boolean testWhileIdle;
-    /** 鍒濆杩炴帴鏁� */
-    private boolean testOnBorrow;
-    /** 鍒濆杩炴帴鏁� */
-    private boolean testOnReturn;
-
-    public DruidDataSource dataSource(DruidDataSource datasource) {
-        datasource.setInitialSize(initialSize);
-        datasource.setMaxActive(maxActive);
-        datasource.setMinIdle(minIdle);
-        datasource.setMaxWait(maxWait);
-        datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
-        datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
-        datasource.setMaxEvictableIdleTimeMillis(maxEvictableIdleTimeMillis);
-        datasource.setValidationQuery(validationQuery);
-        datasource.setTestWhileIdle(testWhileIdle);
-        datasource.setTestOnBorrow(testOnBorrow);
-        datasource.setTestOnReturn(testOnReturn);
-        return datasource;
-    }
-}

--
Gitblit v1.9.3