2016-08-08 4 views
1

Я работаю над веб-проектом, в котором я использовал c3p0 в веб-службах. Я установил следующие парапараметры в файле hibernate.cfg.xml. Но хотя я дал max_size 10000 а период ожидания - 30, иногда сервер mysql не предоставляет другое соединение с db.Так, сайт загружается и загружается, пока я не перезапущу свой сервер. И мой журнал показывает, что «слишком много соединений открыто». Что я пропустил в следующая конфигурация. Пожалуйста, помогите мнеСвязи недоступны иногда в c3p0

<property name="hibernate.c3p0.min_size">10</property> 
     <property name="hibernate.c3p0.max_size">10000</property> 
     <property name="hibernate.c3p0.max_statements">5000</property> 
     <property name="hibernate.c3p0.maxIdleTime">1000</property> 
     <property name="hibernate.c3p0.maxIdleTimeExcessConnections">500</property> 
     <property name="hibernate.c3p0.acquire_increment">100</property> 
     <property name="hibernate.c3p0.idle_test_period">30</property> 
     <property name="hibernate.c3p0.validate">true</property> 
     <property name="hibernate.c3p0.preferredTestQuery">SELECT 1</property> 
     <property name="hibernate.c3p0.testConnectionOnCheckin">true</property> 
     <property name="hibernate.c3p0.testConnectionOnCheckout">false</property> 

ответ

0

У вас, скорее всего, есть утечка соединения. Гигантский размер пула на самом деле не поможет. См. here.

Приложение: Robust Resource Cleanup идиома

Это лучше всего, когда вы можете использовать try with resources. Но если вы работаете со старой версией Java (pre Java 7) или с ресурсами, которые не реализуют AutoCloseable, вам все равно придется возвращаться к подобным вещам.

Connection c  = null; 
OtherResource or = null; 

try 
{ 
    c = cpds.getConnection(); 
    or = getOtherResource() 

    // do stuff 
    // ... 
} 
finally 
{ 
    try { if (or != null) or.close(); } 
    catch (Exception e) { e.printStackTrace(); } 

    try { if (c != null) c.close(); } 
    catch (Exception e) { e.printStackTrace(); } 
} 

Обратите внимание, что, наконец, пункт, безусловно, будет выполняться, если подключение приобретается, и есть лучшая попытка закрыть() каждый ресурс: Если or не закрывается(), что исключение не будет предотвратите попытку закрыть() соединение .

Вы должны быть очень осторожны. Как замечает Кейнс, есть много промахов «twixt чашка и губа».

+0

Да, я понимаю, но я закрываю каждую сессию, которая открывается в слое dao, например \t \t sessionobj.clear(); \t \t \t sessionobj.flush(); \t \t \t sessionobj.close(); – Vicky

+0

поэтому подумайте. вы используете Java 7+ try-with-resources или же громоздкую, старомодную надежную идолоуюку по очистке ресурсов? см. http://stackoverflow.com/questions/11784674/spring-c3p0-postgres/11786683#11786683, если вы используете параметры try, описанные по ссылке выше, я подозреваю, что вы увидите, что это не так. Я могу ошибаться! но просто закрытие сеансов после использования недостаточно. исключения случаются. –

+0

У меня есть ссылка на простую ссылку на ресурс geto, я обновил сообщение с объяснением (соскоблил из [здесь] (https://sourceforge.net/p/c3p0/mailman/c3p0-users/?viewmonth = 200811)). –

Смежные вопросы