提交 bc1462c4 authored 作者: taojinlong's avatar taojinlong

feat: 【数据源】用户可以通过JDBC连接字符串的配置连接到任意支持JDBC的数据库

上级 814aee0e
...@@ -2,18 +2,28 @@ package io.dataease.datasource.dto; ...@@ -2,18 +2,28 @@ package io.dataease.datasource.dto;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
@Getter @Getter
@Setter @Setter
public class CHConfigration extends JdbcDTO { public class CHConfigration extends JdbcDTO {
private String driver = "ru.yandex.clickhouse.ClickHouseDriver"; private String driver = "ru.yandex.clickhouse.ClickHouseDriver";
private String extraParams = "";
public String getJdbc() { public String getJdbc() {
// 连接参数先写死,后边要把编码、时区等参数放到数据源的设置中 if(StringUtils.isEmpty(extraParams.trim())){
return "jdbc:clickhouse://HOSTNAME:PORT/DATABASE" return "jdbc:clickhouse://HOSTNAME:PORT/DATABASE"
.replace("HOSTNAME", getHost().trim()) .replace("HOSTNAME", getHost().trim())
.replace("PORT", getPort().toString().trim()) .replace("PORT", getPort().toString().trim())
.replace("DATABASE", getDataBase().trim()); .replace("DATABASE", getDataBase().trim());
}else {
return "jdbc:clickhouse://HOSTNAME:PORT/DATABASE?EXTRA_PARAMS"
.replace("HOSTNAME", getHost().trim())
.replace("PORT", getPort().toString().trim())
.replace("DATABASE", getDataBase().trim())
.replace("EXTRA_PARAMS", getExtraParams().trim());
}
} }
} }
\ No newline at end of file
...@@ -2,18 +2,27 @@ package io.dataease.datasource.dto; ...@@ -2,18 +2,27 @@ package io.dataease.datasource.dto;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
@Getter @Getter
@Setter @Setter
public class MysqlConfigration extends JdbcDTO { public class MysqlConfigration extends JdbcDTO {
private String driver = "com.mysql.cj.jdbc.Driver"; private String driver = "com.mysql.cj.jdbc.Driver";
private String extraParams = "characterEncoding=UTF-8&connectTimeout=5000&useSSL=false&allowPublicKeyRetrieval=true";
public String getJdbc() { public String getJdbc() {
// 连接参数先写死,后边要把编码、时区等参数放到数据源的设置中 if(StringUtils.isEmpty(extraParams.trim())){
return "jdbc:mysql://HOSTNAME:PORT/DATABASE?characterEncoding=UTF-8&connectTimeout=5000&useSSL=false&allowPublicKeyRetrieval=true" return "jdbc:mysql://HOSTNAME:PORT/DATABASE"
.replace("HOSTNAME", getHost().trim()) .replace("HOSTNAME", getHost().trim())
.replace("PORT", getPort().toString().trim()) .replace("PORT", getPort().toString().trim())
.replace("DATABASE", getDataBase().trim()); .replace("DATABASE", getDataBase().trim());
}else {
return "jdbc:mysql://HOSTNAME:PORT/DATABASE?EXTRA_PARAMS"
.replace("HOSTNAME", getHost().trim())
.replace("PORT", getPort().toString().trim())
.replace("DATABASE", getDataBase().trim())
.replace("EXTRA_PARAMS", getExtraParams().trim());
}
} }
} }
\ No newline at end of file
...@@ -2,18 +2,27 @@ package io.dataease.datasource.dto; ...@@ -2,18 +2,27 @@ package io.dataease.datasource.dto;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
@Getter @Getter
@Setter @Setter
public class PgConfigration extends JdbcDTO { public class PgConfigration extends JdbcDTO {
private String driver = "org.postgresql.Driver"; private String driver = "org.postgresql.Driver";
private String extraParams = "";
public String getJdbc() { public String getJdbc() {
// 连接参数先写死,后边要把编码、时区等参数放到数据源的设置中 if(StringUtils.isEmpty(extraParams.trim())){
return "jdbc:postgresql://HOSTNAME:PORT/DATABASE" return "jdbc:postgresql://HOSTNAME:PORT/DATABASE"
.replace("HOSTNAME", getHost().trim()) .replace("HOSTNAME", getHost().trim())
.replace("PORT", getPort().toString().trim()) .replace("PORT", getPort().toString().trim())
.replace("DATABASE", getDataBase().trim()); .replace("DATABASE", getDataBase().trim());
}else {
return "jdbc:postgresql://HOSTNAME:PORT/DATABASE?EXTRA_PARAMS"
.replace("HOSTNAME", getHost().trim())
.replace("PORT", getPort().toString().trim())
.replace("DATABASE", getDataBase().trim())
.replace("EXTRA_PARAMS", getExtraParams().trim());
}
} }
} }
\ No newline at end of file
...@@ -2,17 +2,26 @@ package io.dataease.datasource.dto; ...@@ -2,17 +2,26 @@ package io.dataease.datasource.dto;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
@Getter @Getter
@Setter @Setter
public class SqlServerConfigration extends JdbcDTO { public class SqlServerConfigration extends JdbcDTO {
private String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; private String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private String extraParams = "";
public String getJdbc(){ public String getJdbc(){
return "jdbc:sqlserver://HOSTNAME:PORT;DatabaseName=DATABASE" if(StringUtils.isEmpty(extraParams.trim())){
.replace("HOSTNAME", getHost().trim()) return "jdbc:sqlserver://HOSTNAME:PORT;DatabaseName=DATABASE"
.replace("PORT", getPort().toString().trim()) .replace("HOSTNAME", getHost().trim())
.replace("DATABASE", getDataBase().trim()); .replace("PORT", getPort().toString().trim())
.replace("DATABASE", getDataBase().trim());
}else {
return "jdbc:sqlserver://HOSTNAME:PORT;DatabaseName=DATABASE;EXTRA_PARAMS"
.replace("HOSTNAME", getHost().trim())
.replace("PORT", getPort().toString().trim())
.replace("DATABASE", getDataBase().trim())
.replace("EXTRA_PARAMS", getExtraParams().trim());
}
} }
} }
...@@ -15,9 +15,8 @@ import io.dataease.controller.ResultHolder; ...@@ -15,9 +15,8 @@ import io.dataease.controller.ResultHolder;
import io.dataease.controller.request.DatasourceUnionRequest; import io.dataease.controller.request.DatasourceUnionRequest;
import io.dataease.controller.sys.base.BaseGridRequest; import io.dataease.controller.sys.base.BaseGridRequest;
import io.dataease.controller.sys.base.ConditionEntity; import io.dataease.controller.sys.base.ConditionEntity;
import io.dataease.datasource.dto.DBTableDTO; import io.dataease.datasource.constants.DatasourceTypes;
import io.dataease.datasource.dto.MysqlConfigration; import io.dataease.datasource.dto.*;
import io.dataease.datasource.dto.OracleConfigration;
import io.dataease.datasource.provider.DatasourceProvider; import io.dataease.datasource.provider.DatasourceProvider;
import io.dataease.datasource.provider.ProviderFactory; import io.dataease.datasource.provider.ProviderFactory;
import io.dataease.datasource.request.DatasourceRequest; import io.dataease.datasource.request.DatasourceRequest;
...@@ -90,12 +89,32 @@ public class DatasourceService { ...@@ -90,12 +89,32 @@ public class DatasourceService {
request.setSort("update_time desc"); request.setSort("update_time desc");
List<DatasourceDTO> datasourceDTOS = extDataSourceMapper.queryUnion(request); List<DatasourceDTO> datasourceDTOS = extDataSourceMapper.queryUnion(request);
datasourceDTOS.forEach(datasourceDTO -> { datasourceDTOS.forEach(datasourceDTO -> {
if(datasourceDTO.getType().equalsIgnoreCase("mysql")){ DatasourceTypes datasourceType = DatasourceTypes.valueOf(datasourceDTO.getType());
datasourceDTO.setConfiguration(JSONObject.toJSONString(new Gson().fromJson(datasourceDTO.getConfiguration(), MysqlConfigration.class)) ); try{
}; switch (datasourceType) {
if(datasourceDTO.getType().equalsIgnoreCase("oracle")){ case mysql:
datasourceDTO.setConfiguration(JSONObject.toJSONString(new Gson().fromJson(datasourceDTO.getConfiguration(), OracleConfigration.class))); case mariadb:
}; case de_doris:
case ds_doris:
datasourceDTO.setConfiguration(JSONObject.toJSONString(new Gson().fromJson(datasourceDTO.getConfiguration(), MysqlConfigration.class)) );
break;
case sqlServer:
datasourceDTO.setConfiguration(JSONObject.toJSONString(new Gson().fromJson(datasourceDTO.getConfiguration(), SqlServerConfigration.class)) );
break;
case oracle:
datasourceDTO.setConfiguration(JSONObject.toJSONString(new Gson().fromJson(datasourceDTO.getConfiguration(), OracleConfigration.class)) );
break;
case pg:
datasourceDTO.setConfiguration(JSONObject.toJSONString(new Gson().fromJson(datasourceDTO.getConfiguration(), PgConfigration.class)) );
break;
case ck:
datasourceDTO.setConfiguration(JSONObject.toJSONString(new Gson().fromJson(datasourceDTO.getConfiguration(), CHConfigration.class)) );
break;
default:
break;
}
}catch (Exception ignore){}
}); });
return datasourceDTOS; return datasourceDTOS;
} }
......
...@@ -1150,7 +1150,8 @@ export default { ...@@ -1150,7 +1150,8 @@ export default {
please_input_acquire_increment: 'Please enter the growth number', please_input_acquire_increment: 'Please enter the growth number',
please_input_connect_timeout: 'Please enter the connection timeout (seconds)', please_input_connect_timeout: 'Please enter the connection timeout (seconds)',
no_less_then_0: 'Parameters in advanced settings cannot be less than zero', no_less_then_0: 'Parameters in advanced settings cannot be less than zero',
priority: 'Advanced setting' priority: 'Advanced setting',
extra_params: 'Extra JDBC connection string'
}, },
pblink: { pblink: {
key_pwd: 'Please enter the password to open the link', key_pwd: 'Please enter the password to open the link',
......
...@@ -1153,7 +1153,8 @@ export default { ...@@ -1153,7 +1153,8 @@ export default {
please_input_acquire_increment: '請輸入增長數', please_input_acquire_increment: '請輸入增長數',
please_input_connect_timeout: '請輸入連接超時(秒)', please_input_connect_timeout: '請輸入連接超時(秒)',
no_less_then_0: '高級設置中的參數不能小于零', no_less_then_0: '高級設置中的參數不能小于零',
priority: '高級設置' priority: '高級設置',
extra_params: '額外的JDBC連接字符串'
}, },
pblink: { pblink: {
key_pwd: '請輸入密碼打開鏈接', key_pwd: '請輸入密碼打開鏈接',
......
...@@ -1158,7 +1158,8 @@ export default { ...@@ -1158,7 +1158,8 @@ export default {
data_mode: '数据模式', data_mode: '数据模式',
direct: '直连模式', direct: '直连模式',
extract: '抽取模式', extract: '抽取模式',
all_compute_mode: '直连、抽取模式' all_compute_mode: '直连、抽取模式',
extra_params: '额外的JDBC连接字符串'
}, },
pblink: { pblink: {
key_pwd: '请输入密码打开链接', key_pwd: '请输入密码打开链接',
......
...@@ -52,6 +52,10 @@ ...@@ -52,6 +52,10 @@
<el-input v-model="form.configuration.esPassword" autocomplete="off" show-password /> <el-input v-model="form.configuration.esPassword" autocomplete="off" show-password />
</el-form-item> </el-form-item>
<el-form-item v-if="form.configuration.dataSourceType=='jdbc' && form.type!=='oracle'" :label="$t('datasource.extra_params')" >
<el-input v-model="form.configuration.extraParams" autocomplete="off" />
</el-form-item>
<el-form-item v-if="form.configuration.dataSourceType=='jdbc'" :label="$t('datasource.port')" prop="configuration.port"> <el-form-item v-if="form.configuration.dataSourceType=='jdbc'" :label="$t('datasource.port')" prop="configuration.port">
<el-input v-model="form.configuration.port" autocomplete="off" /> <el-input v-model="form.configuration.port" autocomplete="off" />
</el-form-item> </el-form-item>
...@@ -155,14 +159,14 @@ export default { ...@@ -155,14 +159,14 @@ export default {
'configuration.connectTimeout': [{ required: true, message: this.$t('datasource.please_input_connect_timeout'), trigger: 'change' }] 'configuration.connectTimeout': [{ required: true, message: this.$t('datasource.please_input_connect_timeout'), trigger: 'change' }]
}, },
allTypes: [ allTypes: [
{ name: 'mysql', label: 'MySQL', type: 'jdbc'}, { name: 'mysql', label: 'MySQL', type: 'jdbc', extraParams: 'characterEncoding=UTF-8&connectTimeout=5000&useSSL=false&allowPublicKeyRetrieval=true'},
{ name: 'oracle', label: 'Oracle', type: 'jdbc' }, { name: 'oracle', label: 'Oracle', type: 'jdbc'},
{ name: 'sqlServer', label: 'SQL Server', type: 'jdbc' }, { name: 'sqlServer', label: 'SQL Server', type: 'jdbc', extraParams: ''},
{ name: 'pg', label: 'PostgreSQL', type: 'jdbc' }, { name: 'pg', label: 'PostgreSQL', type: 'jdbc', extraParams: '' },
{ name: 'es', label: 'Elasticsearch', type: 'es' }, { name: 'es', label: 'Elasticsearch', type: 'es' },
{ name: 'mariadb', label: 'MariaDB', type: 'jdbc' }, { name: 'mariadb', label: 'MariaDB', type: 'jdbc', extraParams: 'characterEncoding=UTF-8&connectTimeout=5000&useSSL=false&allowPublicKeyRetrieval=true' },
{ name: 'ds_doris', label: 'Doris', type: 'jdbc' }, { name: 'ds_doris', label: 'Doris', type: 'jdbc', extraParams: 'characterEncoding=UTF-8&connectTimeout=5000&useSSL=false&allowPublicKeyRetrieval=true' },
{ name: 'ck', label: 'ClickHouse', type: 'jdbc' } { name: 'ck', label: 'ClickHouse', type: 'jdbc', extraParams: '' }
], ],
schemas: [], schemas: [],
canEdit: false, canEdit: false,
...@@ -303,6 +307,7 @@ export default { ...@@ -303,6 +307,7 @@ export default {
for (let i = 0; i < this.allTypes.length; i++) { for (let i = 0; i < this.allTypes.length; i++) {
if (this.allTypes[i].name === this.form.type) { if (this.allTypes[i].name === this.form.type) {
this.form.configuration.dataSourceType = this.allTypes[i].type this.form.configuration.dataSourceType = this.allTypes[i].type
this.form.configuration.extraParams = this.allTypes[i].extraParams
} }
} }
}, },
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论