2012-10-31 3 views
4

У меня есть интересная проблема, которую я не смог решить. Я использую Play! 2.0.4 и используя объединенный пул соединений BoneCP для соединения с БД. Однако по какой-то причине BoneCP продолжает возвращать закрытые соединения.Играйте! 2.0 - BoneCP Возвращаемые закрытые соединения

Database Server: Amazon RDS MySQL 5, default timeout settings (which should be 8 hours...) 

Моя конфигурация Datasource Play выглядит следующим образом:

db.default.driver=com.mysql.jdbc.Driver 
db.default.url="jdbc:mysql://{server}/{schema}?autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8" 
db.default.partitionCount=4 
db.default.idleConnectionTestPeriod=2 minutes 

Я предположил, что установка idleConnectionTestPeriod до 2 минут, конечно, предотвратило бы BoneCP от возвращения закрытых соединений, но это не имеет.

Каждый так часто, я получаю следующую трассировку стека в моих журналах:

Exception in thread "pool-6-thread-25" java.sql.SQLException: Connection is closed! 
    at com.jolbox.bonecp.ConnectionHandle.checkClosed(ConnectionHandle.java:350) 
    at com.jolbox.bonecp.ConnectionHandle.setReadOnly(ConnectionHandle.java:1089) 
    at play.api.db.BoneCPApi$$anon$1.onCheckOut(DB.scala:328) 
    at com.jolbox.bonecp.BoneCP.getConnection(BoneCP.java:514) 
    at com.jolbox.bonecp.BoneCPDataSource.getConnection(BoneCPDataSource.java:114) 
    at play.api.db.DBApi$class.getConnection(DB.scala:64) 
    at play.api.db.BoneCPApi.getConnection(DB.scala:273) 
    at play.api.db.DB$$anonfun$getConnection$1.apply(DB.scala:129) 
    at play.api.db.DB$$anonfun$getConnection$1.apply(DB.scala:129) 
    at scala.Option.map(Option.scala:133) 
    at play.api.db.DB$.getConnection(DB.scala:129) 
    at play.api.db.DB.getConnection(DB.scala) 
    at play.db.DB.getConnection(DB.java:50) 
    at play.db.DB.getConnection(DB.java:43) 
    at play.db.DB.getConnection(DB.java:29) 
    at com.edatasource.inboxtracker.tasks.TrackSiteEventActionTask.run(TrackSiteEventActionTask.java:23) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 

Кто-нибудь знает, как я могу решить эту проблему? В настоящее время мне пришлось обернуть DB.getConnection() в try/catch и просто поймать исключение, созданное BoneCP, и повторить попытку, пока я не получу правильное соединение. Похоже, это не нужно.

Спасибо за любую помощь.

ответ

0

Пожалуйста, попробуйте с 0.8.0-beta1. С этим связана ошибка.

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

  • Нет связанных вопросов^_^