我使用Google Guice Persist(JPA)来操作数据。我的Web应用程序在Jetty服务器上。以下是我的persistence.xml:
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="MyJpaUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>my.api.repository.entity.Foo</class>
<shared-cache-mode>NONE</shared-cache-mode>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url"
value="jdbc:mysql://127.0.0.1/testing?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true" />
<property name="javax.persistence.jdbc.user" value="test_account" />
<property name="javax.persistence.jdbc.password" value="test_pwd" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="hibernate.show_sql" value="false"/>
<property name="format_sql" value="false"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_query_cache" value="false" />
<property name="hibernate.c3p0.max_size" value="30" />
<property name="hibernate.c3p0.min_size" value="5" />
<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" />
<property name="hibernate.c3p0.preferredTestQuery" value="SELECT 1" />
<property name="hibernate.c3p0.testConnectionOnCheckout" value="true" />
</properties>
</persistence-unit>
</persistence>
我的应用程序空闲时出现以下错误:
[c3p0]发生了另一个错误[com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:从服务器成功收到的最后一个数据包是49,492,938毫秒。成功发送到服务器的最后一个数据包是49,492,938毫秒。比服务器配置的值&#39; wait_timeout&#39;更长。您应该考虑在应用程序中使用之前过期和/或测试连接有效性,增加服务器配置的客户端超时值,或者使用Connector / J连接属性&quot; autoReconnect = true&#39;避免这个问题。 ]不会向听众报告!
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:从服务器成功收到的最后一个数据包是49,492,938毫秒。成功发送到服务器的最后一个数据包是49,492,938毫秒。比服务器配置的值&#39; wait_timeout&#39;更长。您应该考虑在应用程序中使用之前过期和/或测试连接有效性,增加服务器配置的客户端超时值,或者使用Connector / J连接属性&quot; autoReconnect = true&#39;避免这个问题。
如何配置persistence.xml以避免此问题? 感谢。
答案 0 :(得分:1)
我遇到过这个问题。这个问题的原因是未公开的实体经理。每当你在db上执行某些操作时,请创建一个新的实体管理器,然后关闭实体管理器。