需要捕获JdbcTemplate.setQueryTimeout

时间:2016-08-25 15:11:44

标签: java spring jdbctemplate

当我有时查询mysql服务器时,我遇到了一个问题,有时它会完全失效。我使用spring JdbcTemplate连接到它。我看到JdbcTemplate有一个setTimeout方法,但我不知道如何检查是否发生了超时。我这样称呼它:

try {
    JdbcTemplate template = new JdbcTemplate(dataSource);
    template.setQueryTimeout(3);
    SqlRowSet rs = template.queryForRowSet(sql);

} catch (DataAccessException e) {
    String msg = "Can't connect to database.";
    response.addError(msg + " " + e);
    logger.error(msg, e);
    return response;
}

我知道这在数据库关闭时工作正常,但我不确定如何测试查询是否因超时而停止,或者查询是否正常执行且未返回任何记录。

添加到我的问题是我实际上无法重现服务器现在挂起的情况,因此我无法自己进行实验。我应该检查某种类型的异常,还是会抛出DataAccessException?或者我可以在SqlRowSet中检查一些东西吗?

1 个答案:

答案 0 :(得分:1)

如果您看到Statement.executeQuery的文档,则确实定义了SQLTimeoutException。如果设置和超出超时(具有多种条件),则会抛出此异常 - 检查数据库驱动程序的文档。

Spring的jdbc模板在内部调用它,而spring.s SQLExceptionTranslator将java.sql异常翻译成QueryTimeoutException

我建议抓住这个例外。

相关问题