From 5366fd1a3b678acdc9942191baec6bc1c536bec7 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Mon, 27 Jun 2022 17:16:43 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E8=B6=85=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../provider/datasource/JdbcProvider.java | 16 +++++++++++++--- frontend/src/lang/en.js | 1 + frontend/src/lang/tw.js | 1 + frontend/src/lang/zh.js | 2 ++ .../views/system/datasource/DsConfiguration.vue | 11 ++++++++++- 5 files changed, 27 insertions(+), 4 deletions(-) diff --git a/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java b/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java index c35baeed23..a8427ecca1 100644 --- a/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java +++ b/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java @@ -60,7 +60,9 @@ public class JdbcProvider extends DefaultJdbcProvider { */ public void exec(DatasourceRequest datasourceRequest) throws Exception { - try (Connection connection = getConnectionFromPool(datasourceRequest); Statement stat = connection.createStatement()) { + JdbcConfiguration jdbcConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), JdbcConfiguration.class); + int queryTimeout = jdbcConfiguration.getQueryTimeout() > 0 ? jdbcConfiguration.getQueryTimeout() : 0; + try (Connection connection = getConnectionFromPool(datasourceRequest); Statement stat = getStatement(connection, queryTimeout)) { Boolean result = stat.execute(datasourceRequest.getQuery()); } catch (SQLException e) { DataEaseException.throwException(e); @@ -183,6 +185,8 @@ public class JdbcProvider extends DefaultJdbcProvider { @Override public List fetchResultField(DatasourceRequest datasourceRequest) throws Exception { + JdbcConfiguration jdbcConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), JdbcConfiguration.class); + int queryTimeout = jdbcConfiguration.getQueryTimeout() > 0 ? jdbcConfiguration.getQueryTimeout() : 0; try (Connection connection = getConnectionFromPool(datasourceRequest); Statement stat = connection.createStatement(); ResultSet rs = stat.executeQuery(datasourceRequest.getQuery())) { return fetchResultField(rs, datasourceRequest); } catch (SQLException e) { @@ -200,6 +204,8 @@ public class JdbcProvider extends DefaultJdbcProvider { Map result = new HashMap<>(); List dataList; List fieldList; + JdbcConfiguration jdbcConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), JdbcConfiguration.class); + int queryTimeout = jdbcConfiguration.getQueryTimeout() > 0 ? jdbcConfiguration.getQueryTimeout() : 0; try (Connection connection = getConnectionFromPool(datasourceRequest); Statement stat = connection.createStatement(); ResultSet rs = stat.executeQuery(datasourceRequest.getQuery())) { fieldList = fetchResultField(rs, datasourceRequest); result.put("fieldList", fieldList); @@ -298,7 +304,9 @@ public class JdbcProvider extends DefaultJdbcProvider { @Override public List getData(DatasourceRequest dsr) throws Exception { List list = new LinkedList<>(); - try (Connection connection = getConnectionFromPool(dsr); Statement stat = connection.createStatement(); ResultSet rs = stat.executeQuery(dsr.getQuery())) { + JdbcConfiguration jdbcConfiguration = new Gson().fromJson(dsr.getDatasource().getConfiguration(), JdbcConfiguration.class); + int queryTimeout = jdbcConfiguration.getQueryTimeout() > 0 ? jdbcConfiguration.getQueryTimeout() : 0; + try (Connection connection = getConnectionFromPool(dsr); Statement stat = getStatement(connection, queryTimeout); ResultSet rs = stat.executeQuery(dsr.getQuery())) { list = getDataResult(rs, dsr); if (dsr.isPageable() && (dsr.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.sqlServer.name()) || dsr.getDatasource().getType().equalsIgnoreCase(DatasourceTypes.db2.name()))) { Integer realSize = dsr.getPage() * dsr.getPageSize() < list.size() ? dsr.getPage() * dsr.getPageSize() : list.size(); @@ -316,7 +324,9 @@ public class JdbcProvider extends DefaultJdbcProvider { @Override public String checkStatus(DatasourceRequest datasourceRequest) throws Exception { String queryStr = getTablesSql(datasourceRequest); - try (Connection con = getConnection(datasourceRequest); Statement statement = con.createStatement(); ResultSet resultSet = statement.executeQuery(queryStr)) { + JdbcConfiguration jdbcConfiguration = new Gson().fromJson(datasourceRequest.getDatasource().getConfiguration(), JdbcConfiguration.class); + int queryTimeout = jdbcConfiguration.getQueryTimeout() > 0 ? jdbcConfiguration.getQueryTimeout() : 0; + try (Connection con = getConnection(datasourceRequest); Statement statement = getStatement(con, queryTimeout); ResultSet resultSet = statement.executeQuery(queryStr)) { } catch (Exception e) { LogUtil.error("Datasource is invalid: " + datasourceRequest.getDatasource().getName(), e); io.dataease.plugins.common.exception.DataEaseException.throwException(e.getMessage()); diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 0fe3b31643..2add74060d 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -1431,6 +1431,7 @@ export default { please_input_replication_num: 'Please enter Replication number', acquire_increment: 'Growth number', connect_timeout: 'Connection timeout (seconds)', + query_timeout: 'Query timeout(seconds)', please_input_initial_pool_size: 'Please enter the number of initial connections', please_input_min_pool_size: 'Please enter the minimum number of connections', please_input_max_pool_size: 'Please enter the maximum number of connections', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index c93d3f2801..7fff4723be 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -1432,6 +1432,7 @@ export default { please_input_replication_num: '請輸入副本數量', acquire_increment: '增長數', connect_timeout: '連接超時(秒)', + query_timeout: '査詢超時(秒)', please_input_initial_pool_size: '請輸入初始連接數', please_input_min_pool_size: '請輸入最小連接數', please_input_max_pool_size: '請輸入最大連接數', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 840d90de20..b7a649b7aa 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -1435,11 +1435,13 @@ export default { max_idle_time: '最大空闲(秒)', acquire_increment: '增长数', connect_timeout: '连接超时(秒)', + query_timeout: '查询超时(秒)', please_input_initial_pool_size: '请输入初始连接数', please_input_min_pool_size: '请输入最小连接数', please_input_max_pool_size: '请输入最大连接数', please_input_max_idle_time: '请输入最大空闲(秒)', please_input_acquire_increment: '请输入增长数', + please_input_query_timeout: '请输入查询超时', please_input_connect_timeout: '请输入连接超时(秒)', no_less_then_0: '高级设置中的参数不能小于零', port_no_less_then_0: '端口不能小于零', diff --git a/frontend/src/views/system/datasource/DsConfiguration.vue b/frontend/src/views/system/datasource/DsConfiguration.vue index 01fc5e6fd6..38844dc326 100644 --- a/frontend/src/views/system/datasource/DsConfiguration.vue +++ b/frontend/src/views/system/datasource/DsConfiguration.vue @@ -248,6 +248,9 @@ + + + @@ -298,7 +301,8 @@ export default { maxIdleTime: 30, acquireIncrement: 5, idleConnectionTestPeriod: 5, - connectTimeout: 5 + connectTimeout: 5, + queryTimeout: 30 }, apiConfiguration: [] } @@ -360,6 +364,11 @@ export default { message: i18n.t('datasource.please_input_acquire_increment'), trigger: 'blur' }], + 'configuration.queryTimeout': [{ + required: true, + message: i18n.t('datasource.please_input_query_timeout'), + trigger: 'blur' + }], 'configuration.connectTimeout': [{ required: true, message: i18n.t('datasource.please_input_connect_timeout'),