gpt4 book ai didi

java - 通信链路故障..连接重置

转载 作者:可可西里 更新时间:2023-11-01 07:56:53 26 4
gpt4 key购买 nike

我的应用程序在使用 Hibernate 与 MySQL 数据库通信时偶尔会看到此异常。我尝试调整 C3p0 属性,但它似乎不起作用。

C3p0相关设置如下:

<property name="hibernate.c3p0.acquire_increment">2</property>
<property name="hibernate.c3p0.idle_test_period">60</property><!-- in seconds -->
<property name="hibernate.c3p0.min_size">2</property>
<property name="hibernate.c3p0.max_size">10</property>
<property name="hibernate.c3p0.max_statements">0</property>
<property name="hibernate.c3p0.timeout">180</property>
<property name="hibernate.c3p0.preferredTestQuery">select 1</property>

连接 url 如下所示:

jdbc:mysql://<DB endpoint>?autoReconnect=true&useUniCode=true&characterEncoding=UTF-8&useSSL=true&requireSSL=true&verifyServerCertificate=false

堆栈跟踪是:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
Last packet sent to the server was 1549998 ms ago.

Caused by: javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLException: java.net.SocketException:
Connection reset

我需要调整 MySQL 系统变量吗?任何指示我们如何避免这种异常?

谢谢吉腾德拉

最佳答案

hibernate.c3p0.idle_test_period -- 或 c3p0.idleConnectionTestPeriod 将仅在连接空闲 60 秒时每 60 秒测试一次。如果您的应用程序非常活跃,那么它不会闲置这么久。 c3p0 尝试在应用程序接收到的异常意味着连接应该失效时发出通知,但这取决于异常的 SQLState,这在数据库/JDBC 驱动程序之间是不一致的并且不完全可靠。死连接很少能在多轮 checkin / checkout 后存活下来,但在您的设置下它可能会发生。

最简单的解决方案是将 c3p0.testConnectionOnCheckin 添加到您的配置中。这确保了无论连接是繁忙还是空闲,连接都将在被允许进入池之前进行测试,而不会产生结帐测试的同步开销。

请看http://www.mchange.com/projects/c3p0/#configuring_connection_testing

另外请验证您设置的配置参数是否正在通过底层连接池。 c3p0 在池初始化时将其配置转储到您的 INFO 级别的日志中:检查您的日志以验证您的设置是否与您认为的一样。 (或者,您可以在应用程序通过 jmx 运行时检查池。)

祝你好运!

关于java - 通信链路故障..连接重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12634948/

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