当抛出SQLTransientConnectionException时,如何知道我的HikariCP池是否真的用尽了?

时间:2016-09-13 21:33:32

标签: connection-pooling hikaricp

HikariCP文档说:

  

connectionTimeout :此属性控制客户端等待来自池的连接的最大毫秒数。如果在没有连接可用的情况下超过此时间,则将抛出SQLException。

通过测试,我发现在这种情况下会抛出N

如果我的游泳池用尽了,我会得到这个例外。 如果我的数据库主机与网络断开连接,我会收到此异常。 如果我的数据库实例服务停止,我会收到此异常。

问题在于,无论什么原因,池都将始终使用相同的消息抛出此异常。

这样我无法告知用户发生了什么。如果游泳池真的用尽了(在重负荷下是正常的事情),应通知用户并要求稍后再试。

但如果我的数据库服务器出现故障,那就是另一个故事了,应该通知用户。

1 个答案:

答案 0 :(得分:0)

检查yourException.getNextException()或yourException.getCause(),如果它不为null,通常意味着网络/数据库问题。

注意:Hikaricp不保留此例外。对于下次调用getConnection()失败,getNextException()/ getCause()可能为null。

https://github.com/brettwooldridge/HikariCP/issues/719报道了这一点,好的事情是布雷特立即做了改变。