我正在开发一个通过JPA和Hibernate 4.2.3完成持久化的应用程序。一切都在正常工作的第一时刻。
但是,当您花费一定时间(在我的情况下为一天)时,应用程序会出现以下错误。
ERROR: Communications link failure
The last packet successfully received from the server was 259.217.434 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.
Abaixo deixo meu persistence.xml...
<persistence-unit name="amh_sys" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/amh_sys" />
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="root"/>
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.format_sql" value="false" />
<property name="hibernate.use_sql_comments" value="false" />
<property name="hibernate.jdbc.wrap_result_sets" value="false" />
<property name="hibernate.hibernate.cache.use_query_cache" value="true" />
<property name="hibernate.c3p0.validate" value="true" />
</properties>
</persistence-unit>
我尝试使用C3P0连接池进行配置,但是有相同的错误......下面是C3P0的配置。
<!-- Important -->
<property name="hibernate.connection.provider_class" value="org.hibernate.connection.C3P0ConnectionProvider" />
<property name="hibernate.c3p0.max_size" value="100" />
<property name="hibernate.c3p0.min_size" value="0" />
<property name="hibernate.c3p0.acquire_increment" value="1" />
<property name="hibernate.c3p0.idle_test_period" value="300" />
<property name="hibernate.c3p0.max_statements" value="0" />
<property name="hibernate.c3p0.timeout" value="100" />
我可以通过更改计算机上的日期来强制显示错误,因为MySQL与参考日期相同。我无法解决这个问题,我希望有人在尝试分享您应用的解决方案时遇到同样的问题。
菲利普。
答案 0 :(得分:0)
如果连接空闲时间过长,MySQL服务器将使连接超时。 http://dev.mysql.com/doc/refman/5.0/en/gone-away.html您可以在超时时间内使用预定查询来保持连接处于活动状态,或通过关闭并重新创建EntityManager来重新建立连接