【问题标题】:C3p0 connection pooling for jpa in persistence.xml not working?persistence.xml 中 jpa 的 C3p0 连接池不起作用?
【发布时间】:2011-04-26 01:55:34
【问题描述】:

按照我能找到的所有示例尝试配置 c3p0 后,我仍然遇到 JDBC 超时。我正在使用 JPA、Hibernate、Tomcat、MySQL [AWS RDS]。这是来自 persistence.xml 的 sn-p:

<property name="javax.persistence.jdbc.url"
value="jdbc:mysql://url..." />
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
<property name="connection.provider_class"  value="org.hibernate.connection.C3P0ConnectionProvider"/>
<property name="hibernate.c3p0.acquire_increment" value="4" />
<property name="hibernate.c3p0.idle_test_period" value="3000" /> 
<property name="hibernate.c3p0.max_size" value="100" />
<property name="hibernate.c3p0.max_statements" value="15" />
<property name="hibernate.c3p0.min_size" value="5" />
<property name="hibernate.c3p0.timeout" value="100" /> 

还有错误日志:

09:18:51.776  WARN   org.hibernate.util.JDBCExceptionReporter  - SQL Error: 0, SQLState: 08S01
09:18:51.777  ERROR  org.hibernate.util.JDBCExceptionReporter  - The last packet successfully received from the server was 38,491,585 milliseconds ago.  ...

【问题讨论】:

  • 对我来说同样的错误。我决定为这个问题开始悬赏。 @Pascal Thivent 的回答没有帮助,我没有关于 c3po 的日志记录(也启用了登录)。

标签: hibernate jpa jetty tomcat6 c3p0


【解决方案1】:

我从这个博客中找到了答案: http://blog.hpxn.net/2009/02/05/using-c3p0-and-hibernate-3/

persistence.xml 中的属性是错误的,你应该以 hibernate 开头:

<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_1_0.xsd"
  version="1.0">
    <persistence-unit name="mypersistenceunitname">
      <properties>
        <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
        <property name="hibernate.hbm2ddl.auto" value="create-drop" />

        <!-- 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" />
      </properties>
    </persistence-unit>
</persistence>

然后,你会看到这个神话般的日志出现:

2011-08-15 08:58:33 com.mchange.v2.c3p0.C3P0Registry banner
INFO: Initializing c3p0-0.9.1 [built 16-January-2007 14:46:42; debug? true; trace: 10]
2011-08-15 08:58:33 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource getPoolManager
INFO: Initializing c3p0 pool... com.mchange.v2.c3p0.PoolBackedDataSource@f3a94e12 [     connectionPoolDataSource -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@6297f706     ....

问候, Stéphane(抱歉赏金)

【讨论】:

【解决方案2】:

配置看起来不错。激活日志记录并确保 C3P0 以适当的设置启动。

2010-10-16 11:58:31,271 INFO [main] o.h.c.ConnectionProviderFactory [ConnectionProviderFactory.java:173] 初始化连接提供程序:org.hibernate.connection.C3P0ConnectionProvider ...

【讨论】:

  • 日志记录被激活(我确实使用了jetty,一个网络服务器,它记录了everyting)。我得到了完全相同的持久性文件,用于休眠的 c3po 和 c3po 都是我的类路径(web-inf/classes,所有内容都是通过 maven 部署的)。但我没有关于 c3po 的日志记录信息。请帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-20
  • 2017-09-25
  • 1970-01-01
  • 2010-11-30
  • 2014-12-22
  • 2012-01-15
  • 1970-01-01
相关资源
最近更新 更多