当前位置: 首页 > 知识库问答 >
问题:

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

萧德庸
2023-03-14

HikariCP文档说:

connectionTimeout:此属性控制客户端等待来自池的连接的最大毫秒数。如果超过此时间而连接不可用,将引发SQLException。

通过测试,我看到在这种情况下抛出了SQLTransientConnectionException

如果我的池用完了,我会得到这个异常。如果数据库主机与网络断开连接,则会出现此异常。如果我的数据库实例服务停止,则会出现此异常。

问题是不管什么原因,池总是会抛出这个异常,并给出相同的消息。

这样我就无法告知用户发生了什么。如果池确实已耗尽(在重负载下是正常情况),则应通知用户并要求用户稍后重试。

但如果我的数据库服务器停机,情况就不同了,应该相应地通知用户。

共有1个答案

吕自明
2023-03-14

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

注意:Hikaricp不保留此异常。对于下一次调用getConnection()失败,getNextException()/getCause()可能为空。

在 https://github.com/brettwooldridge/HikariCP/issues/719 上报告了这一点,好消息是布雷特立即做了改变。

 类似资料:
  • 我想在HikariCP将所有连接添加到其池后开始我的服务。我正在使用Spring Boot。 我有一个很大的池大小,但是在启动应用程序时,HikariCP需要花费很多时间来添加连接,并且我会出现连接超时。

  • (我已经删除了上一个,所以我想你可以在编辑中找到它) 编辑 所以按照bad_coder在评论中告诉的以及他分享的链接中的大多数答案,我点击了“选项显示所有”,我得到了这个 1) 这里唯一有意义的是点击“”按钮,所以我点击了它 2) 现在我应该用路径替换突出显示的部分(换句话说,我在cmd中键入“where python”后得到的路径) 3) 这就是我发现的。那么我应该在突出显示的部分复制并粘贴哪一

  • 我有一本安装了Android Studio的 Macbook。由于我有使用格拉德的项目(而Android Studio也使用格拉德),我会假设我在机器的某个地方安装了格拉德。但是,如果我在终端中键入,我得到。那么,我是因为我有Android Studio而自动安装了渐变,还是必须运行? 我知道这是一个糟糕/愚蠢的问题,但我只想确保我不会安装 Gradle 两次。

  • 我遇到了一些问题,AppEngine抱怨我的代码有Java1.8方法,而AppEngine需要Java1.7。下面是错误跟踪。我不知道该怎么修理它。

  • 问题内容: 每次我运行使用Flask-SQLAlchemy的应用程序时,都会收到以下警告,提示该SQLALCHEMY_TRACK_MODIFICATIONS选项将被禁用。 我试图找出此选项的作用,但是Flask-SQLAlchemy文档尚不清楚该跟踪的用途。 · 如果设置为True(默认值),Flask-SQLAlchemy将跟踪对象的修改并发出信号。这需要额外的内存,如果不需要,可以将其禁用。

  • 问题内容: 1.考虑我的代码在我拥有的JPanel的某行上,我是否自动在EDT上运行? 2.对于不属于GUI,JPanels或其他视图类的其他所有类的相同问题,简单逻辑类。 3.如果我有正在播放音乐的JPanel,则音乐应该在事件分发线程或非EDT的其他线程上运行(因为没有阻塞GUI,尽管我感觉运行没有问题) (来自EDT)? 注意:我想要一个一般规则,而无需使用“ 谢谢” 问题答案: 没有。 没