From 75fe189abcfe595092c2100dc8b01795c6831d26 Mon Sep 17 00:00:00 2001 From: lbw Date: Fri, 1 Sep 2023 14:24:05 +0800 Subject: [PATCH] =?UTF-8?q?:recycle:=20Refactoring=20code.=20up=20dynamic?= =?UTF-8?q?=20datasource=204.1.3=20=E6=94=AF=E6=8C=81=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E7=9A=84=E5=8C=B9=E9=85=8D=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DynamicDataSourceAutoConfiguration.java | 61 ++++++++++++++++--- .../config/JdbcDynamicDataSourceProvider.java | 12 ++-- 2 files changed, 61 insertions(+), 12 deletions(-) diff --git a/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/DynamicDataSourceAutoConfiguration.java b/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/DynamicDataSourceAutoConfiguration.java index 17825f3f1..285780e78 100644 --- a/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/DynamicDataSourceAutoConfiguration.java +++ b/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/DynamicDataSourceAutoConfiguration.java @@ -17,17 +17,28 @@ package com.pig4cloud.pigx.common.datasource; +import com.baomidou.dynamic.datasource.creator.DataSourceCreator; +import com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator; +import com.baomidou.dynamic.datasource.creator.druid.DruidDataSourceCreator; +import com.baomidou.dynamic.datasource.processor.DsHeaderProcessor; import com.baomidou.dynamic.datasource.processor.DsProcessor; +import com.baomidou.dynamic.datasource.processor.DsSessionProcessor; +import com.baomidou.dynamic.datasource.processor.DsSpelExpressionProcessor; import com.baomidou.dynamic.datasource.provider.DynamicDataSourceProvider; import com.pig4cloud.pigx.common.datasource.config.*; import lombok.RequiredArgsConstructor; import org.jasypt.encryption.StringEncryptor; +import org.springframework.beans.factory.BeanFactory; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; +import org.springframework.context.expression.BeanFactoryResolver; + +import java.util.ArrayList; +import java.util.List; /** * @author lengleng @@ -42,20 +53,54 @@ import org.springframework.context.annotation.Import; @EnableConfigurationProperties(DruidDataSourceProperties.class) public class DynamicDataSourceAutoConfiguration { - private final StringEncryptor stringEncryptor; - - private final DruidDataSourceProperties properties; - + /** + * 获取动态数据源提供者 + * @param defaultDataSourceCreator 默认数据源创建器 + * @param stringEncryptor 字符串加密器 + * @param properties 数据源属性 + * @return 动态数据源提供者 + */ @Bean - public DynamicDataSourceProvider dynamicDataSourceProvider() { - return new JdbcDynamicDataSourceProvider(stringEncryptor, properties); + public DynamicDataSourceProvider dynamicDataSourceProvider(DefaultDataSourceCreator defaultDataSourceCreator, + StringEncryptor stringEncryptor, DruidDataSourceProperties properties) { + return new JdbcDynamicDataSourceProvider(defaultDataSourceCreator, stringEncryptor, properties); } + /** + * 获取默认数据源创建器 + * @param druidDataSourceCreator Druid数据源创建器 + * @return 默认数据源创建器 + */ @Bean - public DsProcessor dsProcessor() { - return new LastParamDsProcessor(); + public DefaultDataSourceCreator defaultDataSourceCreator(DruidDataSourceCreator druidDataSourceCreator) { + DefaultDataSourceCreator defaultDataSourceCreator = new DefaultDataSourceCreator(); + List creators = new ArrayList<>(); + creators.add(druidDataSourceCreator); + defaultDataSourceCreator.setCreators(creators); + return defaultDataSourceCreator; } + /** + * 获取数据源处理器 + * @return 数据源处理器 + */ + @Bean + public DsProcessor dsProcessor(BeanFactory beanFactory) { + DsProcessor lastParamDsProcessor = new LastParamDsProcessor(); + DsProcessor headerProcessor = new DsHeaderProcessor(); + DsProcessor sessionProcessor = new DsSessionProcessor(); + DsSpelExpressionProcessor spelExpressionProcessor = new DsSpelExpressionProcessor(); + spelExpressionProcessor.setBeanResolver(new BeanFactoryResolver(beanFactory)); + lastParamDsProcessor.setNextProcessor(headerProcessor); + headerProcessor.setNextProcessor(sessionProcessor); + sessionProcessor.setNextProcessor(spelExpressionProcessor); + return lastParamDsProcessor; + } + + /** + * 获取清除TTL数据源过滤器 + * @return 清除TTL数据源过滤器 + */ @Bean public ClearTtlDataSourceFilter clearTtlDsFilter() { return new ClearTtlDataSourceFilter(); diff --git a/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/JdbcDynamicDataSourceProvider.java b/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/JdbcDynamicDataSourceProvider.java index 3bf449422..7f5b66445 100644 --- a/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/JdbcDynamicDataSourceProvider.java +++ b/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/JdbcDynamicDataSourceProvider.java @@ -17,13 +17,15 @@ package com.pig4cloud.pigx.common.datasource.config; +import com.baomidou.dynamic.datasource.creator.DataSourceProperty; +import com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator; +import com.baomidou.dynamic.datasource.creator.druid.DruidConfig; import com.baomidou.dynamic.datasource.provider.AbstractJdbcDataSourceProvider; -import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty; -import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.druid.DruidConfig; import com.pig4cloud.pigx.common.datasource.support.DataSourceConstants; import com.pig4cloud.pigx.common.datasource.util.DsConfTypeEnum; import com.pig4cloud.pigx.common.datasource.util.DsJdbcUrlEnum; import org.jasypt.encryption.StringEncryptor; +import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import java.sql.ResultSet; import java.sql.SQLException; @@ -43,8 +45,10 @@ public class JdbcDynamicDataSourceProvider extends AbstractJdbcDataSourceProvide private final StringEncryptor stringEncryptor; - public JdbcDynamicDataSourceProvider(StringEncryptor stringEncryptor, DruidDataSourceProperties properties) { - super(properties.getDriverClassName(), properties.getUrl(), properties.getUsername(), properties.getPassword()); + public JdbcDynamicDataSourceProvider(DefaultDataSourceCreator defaultDataSourceCreator, + StringEncryptor stringEncryptor, DruidDataSourceProperties properties) { + super(defaultDataSourceCreator, properties.getDriverClassName(), properties.getUrl(), properties.getUsername(), + properties.getPassword()); this.stringEncryptor = stringEncryptor; this.properties = properties; }