gpt4 book ai didi

java - 需要捕获 JdbcTemplate.setQueryTimeout 的超时情况

转载 作者:行者123 更新时间:2023-12-01 09:34:09 28 4
gpt4 key购买 nike

我遇到一个问题,当我查询 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 中检查一些内容?

最佳答案

如果您看到 Statement.executeQuery 的文档它确实定义了一个SQLTimeoutException。如果设置并超过超时(有多种条件),则会抛出此错误 - 请检查数据库驱动程序的文档。

Spring的jdbc模板在内部调用这个,java.sql异常由spring的SQLExceptionTranslator翻译进入QueryTimeoutException

我建议捕获这个异常。

关于java - 需要捕获 JdbcTemplate.setQueryTimeout 的超时情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39148891/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com