mirror of
http://git.pig4cloud.com/pig/pigx.git
synced 2026-11-08 04:39:00 +08:00
feat(datasource): 支持通过 query-ds-enabled 关闭数据库配置表加载扩展数据源
新增 spring.datasource.druid.query-ds-enabled 配置项,默认开启;显式设为 false 时跳过从 gen_datasource_conf 表加载扩展数据源,便于不依赖该表的部署 场景关闭此行为。
This commit is contained in:
1 parent
76ea7f45ac
commit
2bc5fb5f24
3 files changed
+90
No files matched your search
+5
@@ -39,4 +39,9 @@ public class DruidDataSourceProperties extends DruidConfig {
|
||||
*/
|
||||
private String queryDsSql = "select * from gen_datasource_conf where del_flag = ?";
|
||||
|
||||
/**
|
||||
* 是否从数据库配置表加载扩展数据源,默认开启
|
||||
*/
|
||||
private Boolean queryDsEnabled = true;
|
||||
|
||||
}
|
||||
+25
@@ -28,10 +28,12 @@ import com.pig4cloud.pigx.common.datasource.util.DsTypeEnum;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.jasypt.encryption.StringEncryptor;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -58,6 +60,20 @@ public class JdbcDynamicDataSourceProvider extends AbstractJdbcDataSourceProvide
|
||||
this.properties = properties;
|
||||
}
|
||||
|
||||
/**
|
||||
* 加载所有数据源
|
||||
*
|
||||
* @return 所有数据源
|
||||
*/
|
||||
@Override
|
||||
public Map<String, DataSource> loadDataSources() {
|
||||
if (!isQueryDsEnabled()) {
|
||||
log.debug("spring.datasource.druid.query-ds-enabled=false,已关闭数据库配置表加载");
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
return super.loadDataSources();
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行语句获得数据源参数
|
||||
*
|
||||
@@ -123,4 +139,13 @@ public class JdbcDynamicDataSourceProvider extends AbstractJdbcDataSourceProvide
|
||||
return map;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否开启从数据库配置表加载扩展数据源
|
||||
*
|
||||
* @return true 开启(默认);仅显式配置为 false 时关闭
|
||||
*/
|
||||
boolean isQueryDsEnabled() {
|
||||
return !Boolean.FALSE.equals(properties.getQueryDsEnabled());
|
||||
}
|
||||
|
||||
}
|
||||
+60
@@ -0,0 +1,60 @@
|
||||
package com.pig4cloud.pigx.common.datasource.config;
|
||||
|
||||
import com.baomidou.dynamic.datasource.creator.DefaultDataSourceCreator;
|
||||
import org.jasypt.encryption.StringEncryptor;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* {@link JdbcDynamicDataSourceProvider} 单元测试:验证 query-ds-enabled 开关的默认开启与显式关闭行为
|
||||
*
|
||||
* @author lengleng
|
||||
* @date 2026/7/6
|
||||
*/
|
||||
class JdbcDynamicDataSourceProviderTests {
|
||||
|
||||
@Test
|
||||
void enablesJdbcTableLoadingByDefault() {
|
||||
DruidDataSourceProperties properties = druidProperties();
|
||||
JdbcDynamicDataSourceProvider provider = newProvider(properties);
|
||||
|
||||
assertThat(provider.isQueryDsEnabled()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
void skipsJdbcTableLoadingWhenDisabledExplicitly() {
|
||||
DruidDataSourceProperties properties = druidProperties();
|
||||
properties.setQueryDsEnabled(false);
|
||||
|
||||
JdbcDynamicDataSourceProvider provider = newProvider(properties);
|
||||
|
||||
assertThat(provider.loadDataSources()).isEmpty();
|
||||
assertThat(provider.isQueryDsEnabled()).isFalse();
|
||||
}
|
||||
|
||||
private static JdbcDynamicDataSourceProvider newProvider(DruidDataSourceProperties properties) {
|
||||
StringEncryptor stringEncryptor = new StringEncryptor() {
|
||||
@Override
|
||||
public String encrypt(String message) {
|
||||
return message;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String decrypt(String encryptedMessage) {
|
||||
return encryptedMessage;
|
||||
}
|
||||
};
|
||||
return new JdbcDynamicDataSourceProvider(new DefaultDataSourceCreator(), stringEncryptor, properties);
|
||||
}
|
||||
|
||||
private static DruidDataSourceProperties druidProperties() {
|
||||
DruidDataSourceProperties properties = new DruidDataSourceProperties();
|
||||
properties.setDriverClassName("not.exists.Driver");
|
||||
properties.setUrl("jdbc:not-executed");
|
||||
properties.setUsername("root");
|
||||
properties.setPassword("root");
|
||||
return properties;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user