feat: 支持查询超时

This commit is contained in:
taojinlong 2022-06-27 17:16:43 +08:00
parent fb5f713d62
commit 5366fd1a3b
5 changed files with 27 additions and 4 deletions

View File

@ -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<TableField> 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<String, List> result = new HashMap<>();
List<String[]> dataList;
List<TableField> 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<String[]> getData(DatasourceRequest dsr) throws Exception {
List<String[]> 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());

View File

@ -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 timeoutseconds',
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',

View File

@ -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: '請輸入最大連接數',

View File

@ -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: '端口不能小于零',

View File

@ -248,6 +248,9 @@
<el-form-item :label="$t('datasource.max_pool_size')" prop="configuration.maxPoolSize">
<el-input v-model="form.configuration.maxPoolSize" autocomplete="off" type="number" min="0"/>
</el-form-item>
<el-form-item v-if="datasourceType.isJdbc" :label="$t('datasource.query_timeout')" prop="configuration.queryTimeout">
<el-input v-model="form.configuration.queryTimeout" autocomplete="off" type="number" min="0"/>
</el-form-item>
</el-collapse-item>
</el-collapse>
</el-form>
@ -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'),