Конфигурации C3P0! Где и как?
Мы реализуем веб-приложение с использованием JPA2.0 и Hibernate3.0. Конфигурации пула соединений задаются в файле persistence.xml, расположенном в папке META-INF.
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?
Ответы
Ответ 1
У меня была такая же проблема с приличиями, которые я вложил в persistence.xml, не повлиял на c3p0.
Заглядывая в http://www.mchange.com/projects/c3p0/index.html#configuration_files Я попытался поместить xml файл с именем c3p0-config.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>
Ответ 2
Хороший вопрос, плохой титул.:) Я думаю, что я ответил на этот вопрос на вашем повторном посту: Лучшая конфигурация c3p0
Ответ 3
У меня была такая же самая проблема, моя проблема заключалась в том, что мой контейнер веб-приложений (Tomcat) управлял моими подключениями к базе данных. Мне пришлось переместить конфигурацию c3p0 из моего файла persistence.xml в Tomcat context.xml. Предоставленная ссылка Domenic D - отличное место для начала, если это ваша проблема.
Ответ 4
В ваших настройках есть опечатка, она должна быть idle_test_period
не idle_test_periods
.
См. Этот пост для получения информации о настройке: использование c3p0.idle_test_period.