mirror of
http://git.pig4cloud.com/pig/pigx.git
synced 2026-11-08 12:39:05 +08:00
refactor(pigx-common-datasource): 重构动态数据源配置
- 移除 DruidDataSourceProperties 配置类,直接使用 DruidDataSourceWrapper - 移除冗余的配置属性和创建逻辑,提升代码简洁性
This commit is contained in:
1 parent
f759865202
commit
fe64bf38c2
4 files changed
+36
-91
No files matched your search
+21
-22
@@ -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() {
|
||||
|
||||
-41
@@ -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'";
|
||||
|
||||
}
|
||||
+10
-6
@@ -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();
|
||||
|
||||
+5
-22
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user