sch*_*enk 7 spring hibernate c3p0
我们有一个带有 Spring、Hibernate、C3P0、Oracle DB 驱动程序堆栈(背后有 Oracle DB)的 Web 应用程序。有时我们会遇到较长时间的阻塞锁,然后在数据库端被杀死。(我们知道这是由糟糕的应用程序设计引起的,我们将修复它,但这不是这个问题的重点)。在数据库会话被数据库终止后,连接池似乎重用了现在断开的连接,这导致了错误:
A PooledConnection that has already signalled a Connection error is still in use!
Another error has occurred [ java.sql.SQLRecoverableException: Closed Connection ] which will not be reported to listeners!
Run Code Online (Sandbox Code Playgroud)
在我们配置的DataSource上
dataSource.setTestConnectionOnCheckin(true);
dataSource.setTestConnectionOnCheckout(true);
Run Code Online (Sandbox Code Playgroud)
但这没有帮助。我们预计连接会失败这些测试,然后进行更新。但这并没有发生。
对我们如何重建断开的连接有什么提示吗?
Connection当已经检出的a遇到Exception导致 c3p0 将其视为无效(因此不会将其重新合并回池中)时,会发出此警告close(),但Connection继续使用并再次遇到异常。这些不是池中断开的连接。它们Connection在应用程序使用时被破坏。因此,在结账(或签入)时测试它们对它们没有任何作用。
要解决这个问题,您需要检查应用程序代码中的异常处理。是否存在这样的情况:残疾人Connection可能抛出了Exception,但Exception被抓住并Connection重新使用?
警告本身是无害的。这只是说 c3p0 已经知道情况Connection不好,它不会再次发出事件来发出信号。
| 归档时间: |
|
| 查看次数: |
10705 次 |
| 最近记录: |