From fe64bf38c22a23c99472c3af53b044c3fe725e91 Mon Sep 17 00:00:00 2001 From: PIGCLOUD Date: Fri, 20 Mar 2026 11:27:26 +0800 Subject: [PATCH] =?UTF-8?q?refactor(pigx-common-datasource):=20=E9=87=8D?= =?UTF-8?q?=E6=9E=84=E5=8A=A8=E6=80=81=E6=95=B0=E6=8D=AE=E6=BA=90=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除 DruidDataSourceProperties 配置类,直接使用 DruidDataSourceWrapper - 移除冗余的配置属性和创建逻辑,提升代码简洁性 --- .../DynamicDataSourceAutoConfiguration.java | 43 +++++++++---------- .../config/DruidDataSourceProperties.java | 41 ------------------ .../config/JdbcDynamicDataSourceProvider.java | 16 ++++--- .../config/MasterDataSourceProvider.java | 27 +++--------- 4 files changed, 36 insertions(+), 91 deletions(-) delete mode 100644 pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/DruidDataSourceProperties.java 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 f86cbae6c..2f973d413 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,6 +17,7 @@ package com.pig4cloud.pigx.common.datasource; +import com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceWrapper; import com.baomidou.dynamic.datasource.creator.DataSourceCreator; import com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator; import com.baomidou.dynamic.datasource.creator.druid.DruidDataSourceCreator; @@ -29,9 +30,10 @@ import com.pig4cloud.pigx.common.datasource.config.*; import lombok.RequiredArgsConstructor; import org.jasypt.encryption.StringEncryptor; import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @@ -50,40 +52,41 @@ import java.util.List; @RequiredArgsConstructor @Import(DynamicLogConfiguration.class) @AutoConfigureAfter(DataSourceAutoConfiguration.class) -@EnableConfigurationProperties(DruidDataSourceProperties.class) public class DynamicDataSourceAutoConfiguration { + @Value("${spring.datasource.druid.query-ds-sql:select * from gen_datasource_conf where del_flag = ?}") + private String queryDsSql; + + /** + * 主数据源,直接使用 DruidDataSourceWrapper 绑定 spring.datasource.druid 的完整配置 + */ + @Bean + @ConfigurationProperties("spring.datasource.druid") + public DruidDataSourceWrapper masterDruidDataSource() { + return new DruidDataSourceWrapper(); + } + /** * 获取动态数据源提供者 - * - * @param defaultDataSourceCreator 默认数据源创建器 - * @param stringEncryptor 字符串加密器 - * @param properties 数据源属性 - * @return 动态数据源提供者 */ @Bean public DynamicDataSourceProvider dynamicDataSourceProvider(DefaultDataSourceCreator defaultDataSourceCreator, - StringEncryptor stringEncryptor, DruidDataSourceProperties properties) { - return new JdbcDynamicDataSourceProvider(defaultDataSourceCreator, stringEncryptor, properties); + StringEncryptor stringEncryptor, + DruidDataSourceWrapper masterDruidDataSource) { + return new JdbcDynamicDataSourceProvider(defaultDataSourceCreator, stringEncryptor, masterDruidDataSource, queryDsSql); } /** * 主数据源提供程序 - * - * @param defaultDataSourceCreator 默认数据源创建者 - * @param properties 性能 - * @return {@link DynamicDataSourceProvider } */ @Bean - public DynamicDataSourceProvider masterDataSourceProvider(DefaultDataSourceCreator defaultDataSourceCreator, DruidDataSourceProperties properties) { - return new MasterDataSourceProvider(defaultDataSourceCreator, properties); + public DynamicDataSourceProvider masterDataSourceProvider(DefaultDataSourceCreator defaultDataSourceCreator, + DruidDataSourceWrapper masterDruidDataSource) { + return new MasterDataSourceProvider(defaultDataSourceCreator, masterDruidDataSource); } /** * 获取默认数据源创建器 - * - * @param druidDataSourceCreator Druid数据源创建器 - * @return 默认数据源创建器 */ @Bean public DefaultDataSourceCreator defaultDataSourceCreator(DruidDataSourceCreator druidDataSourceCreator) { @@ -96,8 +99,6 @@ public class DynamicDataSourceAutoConfiguration { /** * 获取数据源处理器 - * - * @return 数据源处理器 */ @Bean public DsProcessor dsProcessor(BeanFactory beanFactory) { @@ -114,8 +115,6 @@ public class DynamicDataSourceAutoConfiguration { /** * 获取清除TTL数据源过滤器 - * - * @return 清除TTL数据源过滤器 */ @Bean public ClearTtlDataSourceFilter clearTtlDsFilter() { diff --git a/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/DruidDataSourceProperties.java b/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/DruidDataSourceProperties.java deleted file mode 100644 index 88c388559..000000000 --- a/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/DruidDataSourceProperties.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.pig4cloud.pigx.common.datasource.config; - -import lombok.Data; -import org.springframework.boot.context.properties.ConfigurationProperties; - -/** - * @author lengleng - * @date 2019-05-14 - *

- * 参考DruidDataSourceWrapper - */ -@Data -@ConfigurationProperties("spring.datasource.druid") -public class DruidDataSourceProperties { - - /** - * 数据源用户名 - */ - private String username; - - /** - * 数据源密码 - */ - private String password; - - /** - * jdbcurl - */ - private String url; - - /** - * 数据源驱动 - */ - private String driverClassName; - - /** - * 查询数据源的SQL - */ - private String queryDsSql = "select * from gen_datasource_conf where del_flag = '0'"; - -} 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 ace487ed5..7b1b7bb3a 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,6 +17,7 @@ package com.pig4cloud.pigx.common.datasource.config; +import com.alibaba.druid.spring.boot3.autoconfigure.DruidDataSourceWrapper; import com.baomidou.dynamic.datasource.creator.DataSourceProperty; import com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator; import com.baomidou.dynamic.datasource.creator.druid.DruidConfig; @@ -46,16 +47,19 @@ public class JdbcDynamicDataSourceProvider extends AbstractJdbcDataSourceProvide private static final String SQL_LOG_FILTER = "sqlLogFilter"; - private final DruidDataSourceProperties properties; + private static final String DEFAULT_QUERY_DS_SQL = "select * from gen_datasource_conf where del_flag = ?"; + + private final String queryDsSql; private final StringEncryptor stringEncryptor; public JdbcDynamicDataSourceProvider(DefaultDataSourceCreator defaultDataSourceCreator, - StringEncryptor stringEncryptor, DruidDataSourceProperties properties) { - super(defaultDataSourceCreator, properties.getDriverClassName(), properties.getUrl(), properties.getUsername(), - properties.getPassword()); + StringEncryptor stringEncryptor, DruidDataSourceWrapper masterDataSource, + String queryDsSql) { + super(defaultDataSourceCreator, masterDataSource.getDriverClassName(), masterDataSource.getUrl(), + masterDataSource.getUsername(), masterDataSource.getPassword()); this.stringEncryptor = stringEncryptor; - this.properties = properties; + this.queryDsSql = queryDsSql != null ? queryDsSql : DEFAULT_QUERY_DS_SQL; } /** @@ -72,7 +76,7 @@ public class JdbcDynamicDataSourceProvider extends AbstractJdbcDataSourceProvide try { // 使用PreparedStatement防止SQL注入,并添加租户隔离 - PreparedStatement pstmt = statement.getConnection().prepareStatement(properties.getQueryDsSql()); + PreparedStatement pstmt = statement.getConnection().prepareStatement(queryDsSql); pstmt.setString(1, YesNoEnum.NO.getCode()); // del_flag参数 ResultSet rs = pstmt.executeQuery(); diff --git a/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/MasterDataSourceProvider.java b/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/MasterDataSourceProvider.java index b93319c53..9262ec627 100644 --- a/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/MasterDataSourceProvider.java +++ b/pigx-common/pigx-common-datasource/src/main/java/com/pig4cloud/pigx/common/datasource/config/MasterDataSourceProvider.java @@ -17,9 +17,7 @@ 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.AbstractDataSourceProvider; import javax.sql.DataSource; @@ -32,23 +30,17 @@ import static com.pig4cloud.pigx.common.datasource.support.DataSourceConstants.D * @author lengleng * @date 2025/1/14 *

- * 保证原有的 druid 配置有效性,只需要增加其他扩展数据源即可 + * 直接使用 DruidDataSourceWrapper 作为主数据源,保持 spring.datasource.druid 配置的完整性 */ public class MasterDataSourceProvider extends AbstractDataSourceProvider { - private static final String SQL_LOG_FILTER = "sqlLogFilter"; + private final DataSource masterDataSource; - private final DruidDataSourceProperties properties; - - private final DefaultDataSourceCreator defaultDataSourceCreator; - - public MasterDataSourceProvider(DefaultDataSourceCreator defaultDataSourceCreator, DruidDataSourceProperties properties) { + public MasterDataSourceProvider(DefaultDataSourceCreator defaultDataSourceCreator, DataSource masterDataSource) { super(defaultDataSourceCreator); - this.properties = properties; - this.defaultDataSourceCreator = defaultDataSourceCreator; + this.masterDataSource = masterDataSource; } - /** * 加载所有数据源 * @@ -57,16 +49,7 @@ public class MasterDataSourceProvider extends AbstractDataSourceProvider { @Override public Map loadDataSources() { Map map = new HashMap<>(); - // 添加默认主数据源 - DataSourceProperty property = new DataSourceProperty(); - property.setUsername(properties.getUsername()); - property.setPassword(properties.getPassword()); - property.setUrl(properties.getUrl()); - - DruidConfig druidConfig = new DruidConfig(); - druidConfig.setProxyFilters(SQL_LOG_FILTER); - property.setDruid(druidConfig); - map.put(DS_MASTER, defaultDataSourceCreator.createDataSource(property)); + map.put(DS_MASTER, masterDataSource); return map; } }