refactor(pigx-common-datasource): 重构动态数据源配置

- 移除 DruidDataSourceProperties 配置类,直接使用 DruidDataSourceWrapper
- 移除冗余的配置属性和创建逻辑,提升代码简洁性
This commit is contained in:
PIGCLOUD committed 2026-03-20 11:28:11 +08:00
1 parent f759865202
commit fe64bf38c2
4 files changed
+36 -91

No files matched your search

@@ -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() {
@@ -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
* <p>
* 参考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'";
}
@@ -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();
@@ -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
* <p>
* 保证原有的 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<String, DataSource> loadDataSources() {
Map<String, DataSource> 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;
}
}