【发布时间】:2019-10-10 21:00:00
【问题描述】:
我注意到即使在数据库关闭时,池中实际上没有可用的连接,Hikari CP 仍然等待连接超时到期,然后再向客户端发送异常。
我同意当数据库可用时这是可取的,但在我的情况下,我希望池在没有可用连接时发送异常之前不要等待。
原因是数据库本身在不到 2 毫秒的时间内回答,所以我每秒可以处理数千个事务,但是当没有可用的连接时,池将等待更长的时间(建议的最小可接受超时为 250 毫秒)所以我不能再处理吞吐量了。另一方面,我的逻辑可以在没有数据库的情况下工作一段时间。
我应该如何管理这个?
编辑:
This link 几乎是我想要实现的,减去我希望 HikariCP 自动执行此操作的事实,我不应该激活挂起状态。
【问题讨论】:
-
我现在也遇到了同样的问题,你有解决这个问题的办法吗?
-
很遗憾,我记不太清了,但我认为就 Hikari 而言,我使用了 250 毫秒的超时,这根本不是很好。在与我提出这个问题的项目不同的项目中,我使用了 Hystrix,它允许您指定方法的超时以及当方法被认为不可用时的回退(例如,在某些超时之后)。这也应该解决 Hikari 的限制。
-
我启用了 JMX,并且正在查看池中的总连接数。如果数据源池中的总连接数下降到 0,则意味着到达数据库时出现问题,并且我在调用 getConnection() 之前抛出异常(在 connectionTimeout 期间阻塞)。现在在 totalConnections 降至 0 之前需要一些时间(取决于池中的连接数),因为它必须调用 getConnection() 并阻塞,然后使连接无效并从池中逐出。但是在池为空后,我可以处理缓存中的记录并跳过数据库读取。