使用Spring/HHibernate/Postgres时处理事务超时导致的异常



我试图向系统的用户提供一条有用的错误消息,在该系统中,某些查询可能需要很长时间才能执行。我已经使用Spring使用@Transactional(timeout = 5)设置了事务超时。

这按预期工作,但带注释方法的调用方接收到JpaSystemException: could not extract ResultSet异常(由GenericJDBCException: could not extract ResultSet引起,而由PSQLException: ERROR: canceling statement due to user request引起(。

据我所知,异常是Hibernate和JDBC驱动程序在超时后取消一条语句的结果。

有没有什么方法可以确定异常是由于超过了事务超时而导致的,这样我就可以向用户提供一条错误消息,说明他们的查询失败的原因?

该应用程序使用Spring框架4.2.9、Hibernate 4.3.11和Postgres JDBC驱动程序9.4.1209。我意识到这些都很旧了。如果更新的版本能让处理这种情况变得更容易,我很想知道。

根据某种正则表达式模式检查原因的异常消息,或者只检查消息中是否包含这样的字符串,怎么样?

exception.getCause().getCause().getMessage().equals("ERROR: canceling statement due to user request")

最新更新