C3P0配置!在哪里和如何?

时间:2012-09-16 10:44:31

标签: java hibernate jpa-2.0 connection-pooling c3p0

我们正在使用JPA2.0和Hibernate3.0实现Web应用程序。连接池配置在位于META-INF文件夹中的persistence.xml中设置。


的persistence.xml:

<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <persistence-unit name="MyPU" transaction-type="RESOURCE_LOCAL">
        <!-- Entity Classes-->
        <properties>
            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="bytecode.provider"   value="org.hibernate.bytecode.javassist.BytecodeProviderImpl"/>
            <property name="hibernate.connection.username" value="{username}"/>
            <property name="hibernate.connection.password" value="{password}"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hibernate.connection.url" value="{jdbc url}"/>

            <property name="hibernate.c3p0.min_size" value="1"/>
            <property name="hibernate.c3p0.timeout" value="1000"/>
            <property name="hibernate.c3p0.acquire_increment" value="1"/>
            <property name="hibernate.c3p0.idle_test_periods" value="600"/>
            <property name="hibernate.c3p0.testConnectionOnCheckin" value="true"/>
            <property name="hibernate.c3p0.preferredTestQuery" value="SELECT 1;"/>
       </properties>
    </persistence-unit>
</persistence>

我们遇到连接池配置问题。似乎配置没有效果,连接将在8小时后中断。 我们需要另一个配置文件,如hibernate.cfg.xml或hibernate.properties?

4 个答案:

答案 0 :(得分:4)

我在persistence.xml中提出的属性也存在同样的问题,不会影响c3p0。

调查http://www.mchange.com/projects/c3p0/index.html#configuration_files我尝试将名为c3p0-config.xml的xml文件放入WEB-INF/classes并将其设置为完美。

以下是c3p0-config.xml文件的示例:

<c3p0-config>
  <default-config>
    <property name="automaticTestTable">con_test</property>
    <property name="checkoutTimeout">30000</property>
    <property name="idleConnectionTestPeriod">30</property>
    <property name="initialPoolSize">10</property>
    <property name="maxIdleTime">30</property>
    <property name="maxPoolSize">100</property>
    <property name="minPoolSize">10</property>
    <property name="maxStatements">200</property>

    <user-overrides user="test-user">
      <property name="maxPoolSize">10</property>
      <property name="minPoolSize">1</property>
      <property name="maxStatements">0</property>
    </user-overrides>

  </default-config>
</c3p0-config>

答案 1 :(得分:3)

好问题,标题不好。 :)我想我在你的重新发帖时回答了这个问题:Best configuration of c3p0

答案 2 :(得分:1)

我有同样的问题,我的问题是我的Web应用程序容器(Tomcat)正在管理我的数据库连接。我不得不将我的persistence.xml文件中的c3p0配置移动到Tomcat的context.xml。如果这是您的问题,Domenic D提供的链接是一个很好的起点。

答案 3 :(得分:1)

您的设置中存在拼写错误,应该是idle_test_period而不是idle_test_periods

有关设置的信息,请参阅此帖子:The use of c3p0.idle_test_period.