gpt4 book ai didi

java - c3p0 网络中断后重新连接

转载 作者:行者123 更新时间:2023-11-28 22:40:52 24 4
gpt4 key购买 nike

应用程序连接到 MS SQL 服务器。它在 Tomcat 和 Spring 环境中使用 c3p0 ComboPooledDataSource。

当应用程序失去数据库连接并在几秒钟后恢复连接时,应用程序会恢复连接并可以继续快速查询数据库(一旦网络恢复)。但如果网络中断时间更长,应用程序需要超过 10 分钟才能在网络恢复后恢复数据库连接。

当数据库连接在 10 分钟后恢复时,我看到了这些日志:

[WARNING] Exception on close of inner statement.java.sql.SQLException: Invalid state, the Connection object is closed.
at net.sourceforge.jtds.jdbc.TdsCore.checkOpen(TdsCore.java:481)
[WARNING] [c3p0] A PooledConnection that has already signalled a Connection error is still in use!
[WARNING] [c3p0] Another error has occurred [ java.sql.SQLException: Invalid state, the Connection object is closed. ] which will not be reported to listeners!java.sql.SQLException: Invalid state, the Connection object is closed.

这里是spring-config.xml配置:

<bean id="CommonDataSource" abstract="true" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="net.sourceforge.jtds.jdbc.Driver" />
<property name="minPoolSize" value="${db.minPoolSize}" />
<property name="maxPoolSize" value="${db.maxPoolSize}" />
<property name="acquireRetryAttempts" value="0" />
<property name="checkoutTimeout" value="0" />
<property name="testConnectionOnCheckout" value="true" />
<property name="testConnectionOnCheckin" value="false" />
<property name="idleConnectionTestPeriod" value="10" />
<property name="preferredTestQuery" value="select 1" />
</bean>

我尝试了其他配置,使用非零的 checkoutTimeout、testConnectionOnCheckout=false 和 testConnectionOnCheckin=true,恢复时间仍然很长。

我的配置有什么问题?我想在网络问题修复后立即恢复数据库连接。

非常感谢你的帮助

按照 M. Deinum 的建议使用 Hakari 配置进行编辑

你好,

我试过这个 Hakari 配置:

<bean id="CommonDataSource" abstract="true" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<property name="maximumPoolSize" value="${db.maxPoolSize}" />
<property name="connectionTestQuery" value="select 1"/>
<property name="allowPoolSuspension" value="true"/>
</bean>

但行为是相似的:我必须等待 10-15 分钟才能恢复数据库连接。

请问您有什么建议吗?

最佳答案

该问题与 c3p0 或 HikariCP 无关。我必须修改 jdbc url 并添加这些属性:

loginTimeout=60;socketTimeout=60

也许只有一个就足够了,但我可以用这两个来完成这项工作。这个链接很有帮助http://jtds.sourceforge.net/faq.html

关于java - c3p0 网络中断后重新连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38304768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com