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