【发布时间】:2012-09-20 00:57:23
【问题描述】:
我的应用程序在使用 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>
连接网址如下所示:
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 系统变量吗?任何指针我们如何避免这个异常?
谢谢 日腾德拉
【问题讨论】:
-
当我检查我的日志时,似乎所有异常都来自一个过时的特定连接。这些异常在半小时内被抛出。我认为“idle_test_period”会每 60 秒检查一次连接的有效性。
-
您能否将 testOnBorrow=”true” 添加到您的配置中,试试这个,让我们知道问题所在..
-
日志也显示此消息:[托管:2 未使用:2 排除:1] 我想知道这里的“排除:1”是什么意思?
-
我认为这是池中可用连接的状态
-
'excluded' 表示 c3p0 注意到客户端使用 Connection 时发生的异常,并已将该 Connection 标记为销毁,而不是在将其签回池时重用。