Ошибки пула базы данных c3p0 - PullRequest
0 голосов
/ 22 июля 2010

Я получаю следующее исключение после того, как моя программа работает в течение 30 минут или около того с 3cp0 в качестве пула соединений.

вот ошибка:

   [java]  INFO [Timer-0] (BasicResourcePool.java:1392) - A checked-out resource is overdue, and will be destroyed: com.mchange.v2.c3p0.impl.NewPooledConnection@eaecb09
    [java] The last packet successfully received from the server was 375,017 milliseconds ago.  The last packet sent successfully to the server was 9 milliseconds ago.
    [java] Exception in thread "main" java.lang.NullPointerException
    [java]  at com.mytest.myorg.MyProg.MyProgRunner.main(MyProgRunner.java:104)

и я настраиваю свой пул следующим образом:

ComboPooledDataSource cpds = new ComboPooledDataSource();
cpds.setDriverClass( "com.mysql.jdbc.Driver" ); //loads the jdbc driver            
cpds.setJdbcUrl( "jdbc:mysql://"+hostname+"/"+database );
cpds.setUser(username);                                  
cpds.setPassword(password);  
cpds.setMinPoolSize(5);                                     
cpds.setAcquireIncrement(5);
cpds.setMaxPoolSize(15);
cpds.setAutoCommitOnClose(true);
cpds.setIdleConnectionTestPeriod(300);
cpds.setMaxStatements(180);
cpds.setNumHelperThreads(20);
cpds.setUnreturnedConnectionTimeout(300);

У меня есть 100 потоков, которые просматривают страницу, затем 15 потоков БД, которые вставляют результаты в мою базу данных. Если задача сканирования занимает более 20 секунд, я прекращаю работу. Есть идеи, почему пул соединений с БД просто умирает?

спасибо

Ответы [ 2 ]

3 голосов
/ 15 июля 2013

При использовании c3p0 есть некоторые свойства, которые необходимо инициализировать в файле c3p0.properties.Из них есть одно свойство с именем c3p0.unreturnedConnectionTimeout .

Его значение указывается в секундах.Если какой-либо запрос не вернул результат в течение указанного периода времени (как вы указали для свойства c3p0.unreturnedConnectionTimeout в файле c3p0.properties), текущий сеанс будет уничтожен, а новый сеанс будет удален из пула сеансов, но ваш код работаетпредыдущая сессия, которая уже уничтожена.Таким образом, ваш код выдает сеанс уже закрыт Исключение

Итак, вы должны выяснить максимальное время, которое ваш запрос может занять, и установить значение этого свойства в соответствии с этим.

Cheers

0 голосов
/ 23 июля 2010

эта публикация на форуме может вам помочь: http://old.nabble.com/A-checked-out-resource-is-overdue--td20545738.html#a20575081

В случае уничтоженных потоков возвращаются ли соединения в пул?

...