fix(数据源): 修复 ClickHouse 自定义驱动创建数据集报错 #8423

This commit is contained in:
taojinlong 2024-03-21 11:49:36 +08:00
parent 272bdd244b
commit bff30fd966

View File

@ -448,8 +448,9 @@ public class JdbcProvider extends DefaultJdbcProvider {
String username = null; String username = null;
String password = null; String password = null;
String defaultDriver = null; String defaultDriver = null;
String jdbcurl = null;
String customDriver = null; String customDriver = null;
String jdbcurl = null;
DatasourceTypes datasourceType = DatasourceTypes.valueOf(datasourceRequest.getDatasource().getType()); DatasourceTypes datasourceType = DatasourceTypes.valueOf(datasourceRequest.getDatasource().getType());
Properties props = new Properties(); Properties props = new Properties();
DeDriver deDriver = null; DeDriver deDriver = null;
@ -626,6 +627,7 @@ public class JdbcProvider extends DefaultJdbcProvider {
public JdbcConfiguration setCredential(DatasourceRequest datasourceRequest, DruidDataSource dataSource) throws Exception { public JdbcConfiguration setCredential(DatasourceRequest datasourceRequest, DruidDataSource dataSource) throws Exception {
DatasourceTypes datasourceType = DatasourceTypes.valueOf(datasourceRequest.getDatasource().getType()); DatasourceTypes datasourceType = DatasourceTypes.valueOf(datasourceRequest.getDatasource().getType());
JdbcConfiguration jdbcConfiguration = new JdbcConfiguration(); JdbcConfiguration jdbcConfiguration = new JdbcConfiguration();
String defaultDriver = null;
switch (datasourceType) { switch (datasourceType) {
case mysql: case mysql:
case mariadb: case mariadb:
@ -636,41 +638,44 @@ public class JdbcProvider extends DefaultJdbcProvider {
case StarRocks: case StarRocks:
MysqlConfiguration mysqlConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), MysqlConfiguration.class); MysqlConfiguration mysqlConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), MysqlConfiguration.class);
dataSource.setUrl(mysqlConfiguration.getJdbc()); dataSource.setUrl(mysqlConfiguration.getJdbc());
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setValidationQuery("select 1"); dataSource.setValidationQuery("select 1");
jdbcConfiguration = mysqlConfiguration; jdbcConfiguration = mysqlConfiguration;
defaultDriver = mysqlConfiguration.getDriver();
break; break;
case sqlServer: case sqlServer:
SqlServerConfiguration sqlServerConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), SqlServerConfiguration.class); SqlServerConfiguration sqlServerConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), SqlServerConfiguration.class);
dataSource.setDriverClassName(sqlServerConfiguration.getDriver());
dataSource.setUrl(sqlServerConfiguration.getJdbc()); dataSource.setUrl(sqlServerConfiguration.getJdbc());
dataSource.setValidationQuery("select 1"); dataSource.setValidationQuery("select 1");
jdbcConfiguration = sqlServerConfiguration; jdbcConfiguration = sqlServerConfiguration;
defaultDriver = sqlServerConfiguration.getDriver();
break; break;
case oracle: case oracle:
OracleConfiguration oracleConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), OracleConfiguration.class); OracleConfiguration oracleConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), OracleConfiguration.class);
dataSource.setDriverClassName(oracleConfiguration.getDriver());
dataSource.setUrl(oracleConfiguration.getJdbc()); dataSource.setUrl(oracleConfiguration.getJdbc());
dataSource.setValidationQuery("select 1 from dual"); dataSource.setValidationQuery("select 1 from dual");
jdbcConfiguration = oracleConfiguration; jdbcConfiguration = oracleConfiguration;
defaultDriver = oracleConfiguration.getDriver();
break; break;
case pg: case pg:
PgConfiguration pgConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), PgConfiguration.class); PgConfiguration pgConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), PgConfiguration.class);
dataSource.setDriverClassName(pgConfiguration.getDriver()); dataSource.setDriverClassName(pgConfiguration.getDriver());
dataSource.setUrl(pgConfiguration.getJdbc()); dataSource.setUrl(pgConfiguration.getJdbc());
jdbcConfiguration = pgConfiguration; jdbcConfiguration = pgConfiguration;
defaultDriver = pgConfiguration.getDriver();
break; break;
case ck: case ck:
CHConfiguration chConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), CHConfiguration.class); CHConfiguration chConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), CHConfiguration.class);
dataSource.setDriverClassName(chConfiguration.getDriver()); dataSource.setDriverClassName(chConfiguration.getDriver());
dataSource.setUrl(chConfiguration.getJdbc()); dataSource.setUrl(chConfiguration.getJdbc());
jdbcConfiguration = chConfiguration; jdbcConfiguration = chConfiguration;
defaultDriver = chConfiguration.getDriver();
break; break;
case mongo: case mongo:
MongodbConfiguration mongodbConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), MongodbConfiguration.class); MongodbConfiguration mongodbConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), MongodbConfiguration.class);
dataSource.setDriverClassName(mongodbConfiguration.getDriver()); dataSource.setDriverClassName(mongodbConfiguration.getDriver());
dataSource.setUrl(mongodbConfiguration.getJdbc(datasourceRequest.getDatasource().getId())); dataSource.setUrl(mongodbConfiguration.getJdbc(datasourceRequest.getDatasource().getId()));
jdbcConfiguration = mongodbConfiguration; jdbcConfiguration = mongodbConfiguration;
defaultDriver = mongodbConfiguration.getDriver();
break; break;
case redshift: case redshift:
RedshiftConfiguration redshiftConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), RedshiftConfiguration.class); RedshiftConfiguration redshiftConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), RedshiftConfiguration.class);
@ -678,6 +683,7 @@ public class JdbcProvider extends DefaultJdbcProvider {
dataSource.setDriverClassName(redshiftConfiguration.getDriver()); dataSource.setDriverClassName(redshiftConfiguration.getDriver());
dataSource.setUrl(redshiftConfiguration.getJdbc()); dataSource.setUrl(redshiftConfiguration.getJdbc());
jdbcConfiguration = redshiftConfiguration; jdbcConfiguration = redshiftConfiguration;
defaultDriver = redshiftConfiguration.getDriver();
break; break;
case hive: case hive:
HiveConfiguration hiveConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), HiveConfiguration.class); HiveConfiguration hiveConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), HiveConfiguration.class);
@ -685,6 +691,7 @@ public class JdbcProvider extends DefaultJdbcProvider {
dataSource.setDriverClassName(hiveConfiguration.getDriver()); dataSource.setDriverClassName(hiveConfiguration.getDriver());
dataSource.setUrl(hiveConfiguration.getJdbc()); dataSource.setUrl(hiveConfiguration.getJdbc());
jdbcConfiguration = hiveConfiguration; jdbcConfiguration = hiveConfiguration;
defaultDriver = hiveConfiguration.getDriver();
break; break;
case impala: case impala:
ImpalaConfiguration impalaConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), ImpalaConfiguration.class); ImpalaConfiguration impalaConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), ImpalaConfiguration.class);
@ -692,6 +699,7 @@ public class JdbcProvider extends DefaultJdbcProvider {
dataSource.setDriverClassName(impalaConfiguration.getDriver()); dataSource.setDriverClassName(impalaConfiguration.getDriver());
dataSource.setUrl(impalaConfiguration.getJdbc()); dataSource.setUrl(impalaConfiguration.getJdbc());
jdbcConfiguration = impalaConfiguration; jdbcConfiguration = impalaConfiguration;
defaultDriver = impalaConfiguration.getDriver();
break; break;
case db2: case db2:
Db2Configuration db2Configuration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), Db2Configuration.class); Db2Configuration db2Configuration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), Db2Configuration.class);
@ -699,6 +707,7 @@ public class JdbcProvider extends DefaultJdbcProvider {
dataSource.setDriverClassName(db2Configuration.getDriver()); dataSource.setDriverClassName(db2Configuration.getDriver());
dataSource.setUrl(db2Configuration.getJdbc()); dataSource.setUrl(db2Configuration.getJdbc());
jdbcConfiguration = db2Configuration; jdbcConfiguration = db2Configuration;
defaultDriver = db2Configuration.getDriver();
default: default:
break; break;
} }
@ -707,14 +716,15 @@ public class JdbcProvider extends DefaultJdbcProvider {
ExtendedJdbcClassLoader classLoader; ExtendedJdbcClassLoader classLoader;
if (isDefaultClassLoader(jdbcConfiguration.getCustomDriver())) { if (isDefaultClassLoader(jdbcConfiguration.getCustomDriver())) {
dataSource.setDriverClassName(defaultDriver);
classLoader = extendedJdbcClassLoader; classLoader = extendedJdbcClassLoader;
} else { } else {
DeDriver deDriver = deDriverMapper.selectByPrimaryKey(jdbcConfiguration.getCustomDriver()); DeDriver deDriver = deDriverMapper.selectByPrimaryKey(jdbcConfiguration.getCustomDriver());
classLoader = getCustomJdbcClassLoader(deDriver); classLoader = getCustomJdbcClassLoader(deDriver);
dataSource.setDriverClassName(deDriver.getDriverClass());
} }
dataSource.setDriverClassLoader(classLoader); dataSource.setDriverClassLoader(classLoader);
dataSource.setPassword(jdbcConfiguration.getPassword()); dataSource.setPassword(jdbcConfiguration.getPassword());
return jdbcConfiguration; return jdbcConfiguration;
} }