我在quartz作业中使用groovy.sql.Sql.rows(sql,parameters)来调用存储过程。有时存储过程超时但它不会将异常传播给调用代码。对于以下代码中的ex,异常永远不会进入try / catch块 -
try{
res = db.rows(sql, parameter) //db is of type groovy.sql.Sql
}
catch(Exception e) {
log.error("error in calling the proc", e)
}
我在日志中看到的唯一一件事是来自sql.SQL的警告,它看起来像这样 -
[quartzScheduler_Worker-1] WARN sql.Sql - Failed to execute: { call stored_prod_name(?, ?, ?, ?) } because: JZ006: Caught IOException: java.net.SocketTimeoutException: Read timed out
在此之后我的整个JVM挂起了!我想从超时恢复,但我似乎无法捕获异常。我做错了什么?