Hibernate 4.1.x抛出异常 - 通信链接失败

时间:2017-08-29 20:35:47

标签: mysql hibernate

我们有一个使用mysql在tomcat上运行的应用程序。最近,我们升级了hibernate 4.1.7。不时,间歇性地,我得到通信链接失败。

    org.hibernate.exception.JDBCConnectionException: Communications link failure

Last packet sent to the server was 15667584 ms ago.


at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:131) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at com.sun.proxy.$Proxy49.executeUpdate(Unknown Source) ~[?:?]
        at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:96) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:58) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2870) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3381) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:81) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:362) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:203) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:183) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:167) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:320) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:287) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:193) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:126) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:204) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:55) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:189) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:49) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:753) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.internal.SessionImpl.save(SessionImpl.java:745) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at org.hibernate.internal.SessionImpl.save(SessionImpl.java:741) ~[hibernate-core-4.1.7.Final.jar:4.1.7.Final]
        at common.HibernateUtil.saveObjectNonTransactional(HibernateUtil.java:123) ~[classes/:?]

我们查看了mysql方面并确认我们有足够的可用连接。这是部分hibernate配置

<!--property name="dialect">net.sf.hibernate.dialect.MySQLDialect</property-->
    <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>

    <!--c3p0 connection pool - can be used for deployment and schema generation -->

    <property name="connection.url">jdbc:mysql://10.222.8.60:3306/pasi_v1_5</property>
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>

    <property name="connection.username">username</property>
    <property name="connection.password">password</property>
    <property name="hibernate.c3p0.min_size">3</property>
    <property name="hibernate.c3p0.max_size">10</property>
    <property name="hibernate.c3p0.timeout">7200</property>
    <property name="hibernate.c3p0.max_statements">50</property>
    <property name="hibernate.c3p0.idle_test_period">1800</property>
    <property name="hibernate.show_sql">false</property>
    <!--<property name="hibernate.c3p0.validate">true</property>!-->

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

我遇到这个问题是因为mysql wait_timeout小于Hibernate空闲时间。因此,mysql会提前关闭连接,而hibernate无法引用连接从其旁边关闭。