Играть! Настройки Framework 1.2.4 C3P0, чтобы избежать сбоя канала связи, сделать время простоя

Я пытаюсь настроить параметры C3P0, чтобы избежать ошибки, показанной внизу этого поста.

Это было предложено по этому URL-адресу --- http://make-it-open.blogspot.com/2008/12/sql-error-0-sqlstate-08s01.html --- для настройки параметров следующим образом:

В hibernate.cfg.xml напишите

<property name="c3p0.min_size">5</property>
<property name="c3p0.max_size">20</property>
<property name="c3p0.timeout">1800</property>
<property name="c3p0.max_statements">50</property>

Затем создайте «c3p0.properties» в корневой папке пути к классам и напишите

c3p0.testConnectionOnCheckout=true
c3p0.acquireRetryDelay=1000
c3p0.acquireRetryAttempts=1

Я попытался внести эти коррективы, следуя указаниям Play! Документация по фреймворку, где говорится об использовании "db.pool..." следующим образом:

db.pool.timeout=1800
db.pool.maxSize=15
db.pool.minSize=5
db.pool.initialSize=5
db.pool.acquireRetryAttempts=1
db.pool.preferredTestQuery=SELECT 1
db.pool.testConnectionOnCheckout=true
db.pool.acquireRetryDelay=1000 
db.pool.maxStatements=50

Эти настройки не работают? Должен ли я пытаться установить их по-другому? С этими настройками я все еще получаю сообщение об ошибке, показанное ниже, из-за длительного простоя.

Полная трассировка стека ошибок:

23:00:44,932 WARN  ~ SQL Error: 0, SQLState: 08S01
2012-04-13T23:00:44+00:00 app[web.1]: 23:00:44,932 ERROR ~ Communications link failure
2012-04-13T23:00:44+00:00 app[web.1]: 
2012-04-13T23:00:44+00:00 app[web.1]: The last packet successfully received from the server was 274,847 milliseconds ago.  The last packet sent successfully to the server was 7 milliseconds ago.
2012-04-13T23:00:44+00:00 app[web.1]: 23:00:44,934 ERROR ~ Why the driver complains here?
2012-04-13T23:00:44+00:00 app[web.1]: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.Connection was implicitly closed by the driver.
2012-04-13T23:00:44+00:00 app[web.1]:   at com.mysql.jdbc.Util.handleNewInstance(Util.java:407)
2012-04-13T23:00:44+00:00 app[web.1]:   at com.mysql.jdbc.Util.getInstance(Util.java:382)
2012-04-13T23:00:44+00:00 app[web.1]:   at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1013)
2012-04-13T23:00:44+00:00 app[web.1]:   at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:987)
2012-04-13T23:00:44+00:00 app[web.1]:   at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:982)
2012-04-13T23:00:44+00:00 app[web.1]:   at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
2012-04-13T23:00:44+00:00 app[web.1]:   at com.mysql.jdbc.ConnectionImpl.throwConnectionClosedException(ConnectionImpl.java:1213)
2012-04-13T23:00:44+00:00 app[web.1]:   at com.mysql.jdbc.ConnectionImpl.getMutex(ConnectionImpl.java:3101)
2012-04-13T23:00:44+00:00 app[web.1]:   at com.mysql.jdbc.ConnectionImpl.setAutoCommit(ConnectionImpl.java:4975)
2012-04-13T23:00:44+00:00 app[web.1]:   at org.hibernate.jdbc.BorrowedConnectionProxy.invoke(BorrowedConnectionProxy.java:74)
2012-04-13T23:00:44+00:00 app[web.1]:   at $Proxy49.setAutoCommit(Unknown Source)
2012-04-13T23:00:44+00:00 app[web.1]:   at play.db.jpa.JPAPlugin.closeTx(JPAPlugin.java:368)
2012-04-13T23:00:44+00:00 app[web.1]:   at play.db.jpa.JPAPlugin.onInvocationException(JPAPlugin.java:328)
2012-04-13T23:00:44+00:00 app[web.1]:   at play.plugins.PluginCollection.onInvocationException(PluginCollection.java:447)
2012-04-13T23:00:44+00:00 app[web.1]:   at play.Invoker$Invocation.onException(Invoker.java:240)
2012-04-13T23:00:44+00:00 app[web.1]:   at play.jobs.Job.onException(Job.java:124)
2012-04-13T23:00:44+00:00 app[web.1]:   at play.jobs.Job.call(Job.java:163)
2012-04-13T23:00:44+00:00 app[web.1]:   at play.jobs.Job$1.call(Job.java:66)
2012-04-13T23:00:44+00:00 app[web.1]:   at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
2012-04-13T23:00:44+00:00 app[web.1]:   at java.util.concurrent.FutureTask.run(FutureTask.java:166)
2012-04-13T23:00:44+00:00 app[web.1]:   at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:165)
2012-04-13T23:00:44+00:00 app[web.1]:   at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:266)
2012-04-13T23:00:44+00:00 app[web.1]:   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
2012-04-13T23:00:44+00:00 app[web.1]:   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
2012-04-13T23:00:44+00:00 app[web.1]:   at java.lang.Thread.run(Thread.java:636)
2012-04-13T23:00:44+00:00 app[web.1]: Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

person HelpMeStackOverflowMyOnlyHope    schedule 13.04.2012    source источник


Ответы (2)


Создайте «c3p0.properties» внутри каталога «conf».

Меня устраивает.

Я думаю, что 'db.pool' в application.conf читает только несколько параметров, взгляните на исходный код воспроизведения ( DBPlugin.onApplicationStart() ):

ComboPooledDataSource ds = new ComboPooledDataSource();
ds.setDriverClass(p.getProperty("db.driver"));
ds.setJdbcUrl(p.getProperty("db.url"));
ds.setUser(p.getProperty("db.user"));
ds.setPassword(p.getProperty("db.pass"));
ds.setAcquireRetryAttempts(10);
ds.setCheckoutTimeout(Integer.parseInt(p.getProperty("db.pool.timeout", "5000")));
ds.setBreakAfterAcquireFailure(false);
ds.setMaxPoolSize(Integer.parseInt(p.getProperty("db.pool.maxSize", "30")));
ds.setMinPoolSize(Integer.parseInt(p.getProperty("db.pool.minSize", "1")));
ds.setMaxIdleTimeExcessConnections(Integer.parseInt(p.getProperty("db.pool.maxIdleTimeExcessConnections", "0")));
ds.setIdleConnectionTestPeriod(10);
ds.setTestConnectionOnCheckin(true);
person Fabio Falci    schedule 27.04.2012

idleConnectionTestPeriod не будет взят из файла c3p0.properties. Поэтому вам нужно обновить игровую среду до 1.3 или 1.4.

person Ramanqul Buzaubak    schedule 22.01.2016