Что-то не так с пулером подключения к базе данных Hibernate c3p0 - PullRequest
1 голос
/ 01 октября 2010

с момента последнего поста, сделал все предложенные изменения, но эта проблема все еще преследует меня.Вот ошибка, которую я получаю:

Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was 44,499,102 milliseconds ago.

вот мои hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>

    <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>        
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>        
    <property name="connection.autoReconnect"> true</property>
    <property name="connection.autoReconnectForPools">true</property>
    <property name="connection.is-connection-validation-required">true</property>

    <property name="hibernate.c3p0.acquire_increment">5</property> 
    <property name="hibernate.c3p0.max_size">150</property>
    <property name="hibernate.c3p0.max_statements">0</property>
    <property name="hibernate.c3p0.min_size">10</property>
    <property name="hibernate.c3p0.timeout">100</property> <!-- seconds --> 
    <property name="hibernate.c3p0.idle_test_period">30</property> <!-- seconds --> 

    <property name="hibernate.connection.url">jdbc:mysql://!secret!autoReconnect=true</property>
    <property name="hibernate.connection.username">!secret!</property>
    <property name="hibernate.connection.password">!secret!</property>


    <!-- <property name="hibernate.connection.pool_size">10</property> -->

    <property name="show_sql">true</property>
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.hbm2ddl.auto">update</property>
    <property name="current_session_context_class">thread</property>

    <!-- Mapping files -->
    <mapping resource="mappings.hbm.xml"/>
</session-factory>
</hibernate-configuration>

и c3p0.properties

c3p0.preferredTestQuery=select 1 from dual
c3p0.maxConnectionAge=3600
c3p0.testConnectionOnCheckin=true
c3p0.testConnectionOnCheckout=true
c3p0.acquireRetryDelay=1000
c3p0.acquireRetryAttempts=30
c3p0.breakAfterAcquireFailure=false
c3p0.idleConnectionTestPeriod=100

Ответы [ 4 ]

2 голосов
/ 02 октября 2010

Как по мне, вы неправильно настроили c3p0.

Свойства, такие как c3p0.preferredTestQuery, должны находиться в файле c3p0.properties из вашего пути к классам (например, WEB-INF / classes).

Ниже приведен пример файла c3p0.properties, который хорошо работает для Oracle:

c3p0.preferredTestQuery=SELECT 1 from dual
c3p0.maxConnectionAge=3600
c3p0.testConnectionOnCheckout=true
c3p0.acquireRetryDelay=1000
c3p0.acquireRetryAttempts=30
c3p0.breakAfterAcquireFailure=false

См. Также официальный документ для c3p0 здесь .

И, пожалуйста, обратите внимание на версию c3p0, которую вы используете. У них была проблема с восстановлением соединения в ранних выпусках c3p0 0.9.

0 голосов
/ 08 февраля 2016

Введите следующую строку (1) в файле c3po.properties в корневом каталоге. (Вы должны использовать hibenate-c3po 3.6.10 final.jar) И в части Hibeanate.cfg.xml используется add (2).

  1. c3p0.testConnectionOnCheckout = true

  2. <property name="hibernate.c3p0.idle_test_period">100</property> <property name="hibernate.c3p0.max_size">30</property> <property name="hibernate.c3p0.max_statements">10</property> <property name="hibernate.c3p0.min_size">10</property> <property name="hibernate.c3p0.timeout">1800</property> <property name="hibernate.c3p0.validate">true</property> <property>

0 голосов
/ 03 сентября 2013

Я думаю этот пост может помочь. В этом случае увеличение значения wait_timeout только откладывает вхождение на большее время, чем решение проблемы.

Проблема может быть связана с этим:

  • Вы открываете сеанс гибернации
  • Делайте некоторые вещи, которые занимают больше времени, чем значение wait_timeout вашей базы данных
  • Вы пытаетесь использовать этот сеанс гибернации. Здесь появится сообщение, которое вы прокомментируете

Я задокументировал случай в здесь , если вы заинтересованы.

0 голосов
/ 01 октября 2010

Кажется, что соединение с базой данных истекло и было прервано сервером базы данных.Вам следует либо увеличить время ожидания сервером , либо добавить? AutoReconnect = true в строку подключения jdbc.

...