From bc1462c415e846903809a719d4b63f5207c5e0cd Mon Sep 17 00:00:00 2001 From: taojinlong Date: Wed, 29 Sep 2021 18:26:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E3=80=90=E6=95=B0=E6=8D=AE=E6=BA=90?= =?UTF-8?q?=E3=80=91=E7=94=A8=E6=88=B7=E5=8F=AF=E4=BB=A5=E9=80=9A=E8=BF=87?= =?UTF-8?q?JDBC=E8=BF=9E=E6=8E=A5=E5=AD=97=E7=AC=A6=E4=B8=B2=E7=9A=84?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E8=BF=9E=E6=8E=A5=E5=88=B0=E4=BB=BB=E6=84=8F?= =?UTF-8?q?=E6=94=AF=E6=8C=81JDBC=E7=9A=84=E6=95=B0=E6=8D=AE=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datasource/dto/CHConfigration.java | 20 +++++++--- .../datasource/dto/MysqlConfigration.java | 19 +++++++--- .../datasource/dto/PgConfigration.java | 21 ++++++++--- .../datasource/dto/SqlServerConfigration.java | 19 +++++++--- .../datasource/service/DatasourceService.java | 37 ++++++++++++++----- frontend/src/lang/en.js | 3 +- frontend/src/lang/tw.js | 3 +- frontend/src/lang/zh.js | 3 +- frontend/src/views/system/datasource/form.vue | 19 ++++++---- 9 files changed, 104 insertions(+), 40 deletions(-) diff --git a/backend/src/main/java/io/dataease/datasource/dto/CHConfigration.java b/backend/src/main/java/io/dataease/datasource/dto/CHConfigration.java index 5031769a5e..5a93a1bb25 100644 --- a/backend/src/main/java/io/dataease/datasource/dto/CHConfigration.java +++ b/backend/src/main/java/io/dataease/datasource/dto/CHConfigration.java @@ -2,18 +2,28 @@ package io.dataease.datasource.dto; import lombok.Getter; import lombok.Setter; +import org.apache.commons.lang3.StringUtils; @Getter @Setter public class CHConfigration extends JdbcDTO { private String driver = "ru.yandex.clickhouse.ClickHouseDriver"; + private String extraParams = ""; public String getJdbc() { - // 连接参数先写死,后边要把编码、时区等参数放到数据源的设置中 - return "jdbc:clickhouse://HOSTNAME:PORT/DATABASE" - .replace("HOSTNAME", getHost().trim()) - .replace("PORT", getPort().toString().trim()) - .replace("DATABASE", getDataBase().trim()); + if(StringUtils.isEmpty(extraParams.trim())){ + return "jdbc:clickhouse://HOSTNAME:PORT/DATABASE" + .replace("HOSTNAME", getHost().trim()) + .replace("PORT", getPort().toString().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 diff --git a/backend/src/main/java/io/dataease/datasource/dto/MysqlConfigration.java b/backend/src/main/java/io/dataease/datasource/dto/MysqlConfigration.java index 04ed6a2b0b..c689c27f31 100644 --- a/backend/src/main/java/io/dataease/datasource/dto/MysqlConfigration.java +++ b/backend/src/main/java/io/dataease/datasource/dto/MysqlConfigration.java @@ -2,18 +2,27 @@ package io.dataease.datasource.dto; import lombok.Getter; import lombok.Setter; +import org.apache.commons.lang3.StringUtils; @Getter @Setter public class MysqlConfigration extends JdbcDTO { private String driver = "com.mysql.cj.jdbc.Driver"; + private String extraParams = "characterEncoding=UTF-8&connectTimeout=5000&useSSL=false&allowPublicKeyRetrieval=true"; public String getJdbc() { - // 连接参数先写死,后边要把编码、时区等参数放到数据源的设置中 - return "jdbc:mysql://HOSTNAME:PORT/DATABASE?characterEncoding=UTF-8&connectTimeout=5000&useSSL=false&allowPublicKeyRetrieval=true" - .replace("HOSTNAME", getHost().trim()) - .replace("PORT", getPort().toString().trim()) - .replace("DATABASE", getDataBase().trim()); + if(StringUtils.isEmpty(extraParams.trim())){ + return "jdbc:mysql://HOSTNAME:PORT/DATABASE" + .replace("HOSTNAME", getHost().trim()) + .replace("PORT", getPort().toString().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 diff --git a/backend/src/main/java/io/dataease/datasource/dto/PgConfigration.java b/backend/src/main/java/io/dataease/datasource/dto/PgConfigration.java index e3fd2ae4d3..bdf031b6ff 100644 --- a/backend/src/main/java/io/dataease/datasource/dto/PgConfigration.java +++ b/backend/src/main/java/io/dataease/datasource/dto/PgConfigration.java @@ -2,18 +2,27 @@ package io.dataease.datasource.dto; import lombok.Getter; import lombok.Setter; +import org.apache.commons.lang3.StringUtils; @Getter @Setter public class PgConfigration extends JdbcDTO { private String driver = "org.postgresql.Driver"; - + private String extraParams = ""; public String getJdbc() { - // 连接参数先写死,后边要把编码、时区等参数放到数据源的设置中 - return "jdbc:postgresql://HOSTNAME:PORT/DATABASE" - .replace("HOSTNAME", getHost().trim()) - .replace("PORT", getPort().toString().trim()) - .replace("DATABASE", getDataBase().trim()); + if(StringUtils.isEmpty(extraParams.trim())){ + return "jdbc:postgresql://HOSTNAME:PORT/DATABASE" + .replace("HOSTNAME", getHost().trim()) + .replace("PORT", getPort().toString().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 diff --git a/backend/src/main/java/io/dataease/datasource/dto/SqlServerConfigration.java b/backend/src/main/java/io/dataease/datasource/dto/SqlServerConfigration.java index f08c31167c..3f1d253d45 100644 --- a/backend/src/main/java/io/dataease/datasource/dto/SqlServerConfigration.java +++ b/backend/src/main/java/io/dataease/datasource/dto/SqlServerConfigration.java @@ -2,17 +2,26 @@ package io.dataease.datasource.dto; import lombok.Getter; import lombok.Setter; +import org.apache.commons.lang3.StringUtils; @Getter @Setter public class SqlServerConfigration extends JdbcDTO { private String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; - + private String extraParams = ""; public String getJdbc(){ - return "jdbc:sqlserver://HOSTNAME:PORT;DatabaseName=DATABASE" - .replace("HOSTNAME", getHost().trim()) - .replace("PORT", getPort().toString().trim()) - .replace("DATABASE", getDataBase().trim()); + if(StringUtils.isEmpty(extraParams.trim())){ + return "jdbc:sqlserver://HOSTNAME:PORT;DatabaseName=DATABASE" + .replace("HOSTNAME", getHost().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()); + } } } diff --git a/backend/src/main/java/io/dataease/datasource/service/DatasourceService.java b/backend/src/main/java/io/dataease/datasource/service/DatasourceService.java index ab02e97586..deb7de48ab 100644 --- a/backend/src/main/java/io/dataease/datasource/service/DatasourceService.java +++ b/backend/src/main/java/io/dataease/datasource/service/DatasourceService.java @@ -15,9 +15,8 @@ import io.dataease.controller.ResultHolder; import io.dataease.controller.request.DatasourceUnionRequest; import io.dataease.controller.sys.base.BaseGridRequest; import io.dataease.controller.sys.base.ConditionEntity; -import io.dataease.datasource.dto.DBTableDTO; -import io.dataease.datasource.dto.MysqlConfigration; -import io.dataease.datasource.dto.OracleConfigration; +import io.dataease.datasource.constants.DatasourceTypes; +import io.dataease.datasource.dto.*; import io.dataease.datasource.provider.DatasourceProvider; import io.dataease.datasource.provider.ProviderFactory; import io.dataease.datasource.request.DatasourceRequest; @@ -90,12 +89,32 @@ public class DatasourceService { request.setSort("update_time desc"); List datasourceDTOS = extDataSourceMapper.queryUnion(request); datasourceDTOS.forEach(datasourceDTO -> { - if(datasourceDTO.getType().equalsIgnoreCase("mysql")){ - datasourceDTO.setConfiguration(JSONObject.toJSONString(new Gson().fromJson(datasourceDTO.getConfiguration(), MysqlConfigration.class)) ); - }; - if(datasourceDTO.getType().equalsIgnoreCase("oracle")){ - datasourceDTO.setConfiguration(JSONObject.toJSONString(new Gson().fromJson(datasourceDTO.getConfiguration(), OracleConfigration.class))); - }; + DatasourceTypes datasourceType = DatasourceTypes.valueOf(datasourceDTO.getType()); + try{ + switch (datasourceType) { + case mysql: + 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; } diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index fee7e203df..a221fedaf1 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -1150,7 +1150,8 @@ export default { please_input_acquire_increment: 'Please enter the growth number', please_input_connect_timeout: 'Please enter the connection timeout (seconds)', 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: { key_pwd: 'Please enter the password to open the link', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 36c6a44c81..e732859e5c 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -1153,7 +1153,8 @@ export default { please_input_acquire_increment: '請輸入增長數', please_input_connect_timeout: '請輸入連接超時(秒)', no_less_then_0: '高級設置中的參數不能小于零', - priority: '高級設置' + priority: '高級設置', + extra_params: '額外的JDBC連接字符串' }, pblink: { key_pwd: '請輸入密碼打開鏈接', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index a06788ef86..75e407dc8b 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -1158,7 +1158,8 @@ export default { data_mode: '数据模式', direct: '直连模式', extract: '抽取模式', - all_compute_mode: '直连、抽取模式' + all_compute_mode: '直连、抽取模式', + extra_params: '额外的JDBC连接字符串' }, pblink: { key_pwd: '请输入密码打开链接', diff --git a/frontend/src/views/system/datasource/form.vue b/frontend/src/views/system/datasource/form.vue index f6ec078a84..6ff8a9aedf 100644 --- a/frontend/src/views/system/datasource/form.vue +++ b/frontend/src/views/system/datasource/form.vue @@ -52,6 +52,10 @@ + + + + @@ -155,14 +159,14 @@ export default { 'configuration.connectTimeout': [{ required: true, message: this.$t('datasource.please_input_connect_timeout'), trigger: 'change' }] }, allTypes: [ - { name: 'mysql', label: 'MySQL', type: 'jdbc'}, - { name: 'oracle', label: 'Oracle', type: 'jdbc' }, - { name: 'sqlServer', label: 'SQL Server', type: 'jdbc' }, - { name: 'pg', label: 'PostgreSQL', 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: 'sqlServer', label: 'SQL Server', type: 'jdbc', extraParams: ''}, + { name: 'pg', label: 'PostgreSQL', type: 'jdbc', extraParams: '' }, { name: 'es', label: 'Elasticsearch', type: 'es' }, - { name: 'mariadb', label: 'MariaDB', type: 'jdbc' }, - { name: 'ds_doris', label: 'Doris', type: 'jdbc' }, - { name: 'ck', label: 'ClickHouse', 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', extraParams: 'characterEncoding=UTF-8&connectTimeout=5000&useSSL=false&allowPublicKeyRetrieval=true' }, + { name: 'ck', label: 'ClickHouse', type: 'jdbc', extraParams: '' } ], schemas: [], canEdit: false, @@ -303,6 +307,7 @@ export default { for (let i = 0; i < this.allTypes.length; i++) { if (this.allTypes[i].name === this.form.type) { this.form.configuration.dataSourceType = this.allTypes[i].type + this.form.configuration.extraParams = this.allTypes[i].extraParams } } },