Вопреки ожиданиям, ошибка все еще появляется в v0.8.0-RELEASE. Учитывая этот поток , автор BoneCP создал 0.8.1-SNAPSHOT , но это не полностью решило проблему.
Похоже, что многие настройки конфигурации могут помочь, в частности настройки
db.default.maxConnectionAge=0
Более того, кто-то предположил, что ошибка может происходить из-за механизма отслеживания соединений в BoneCP, и порекомендовал отключить его, установив disableConnectionTracking=true
при выполнении кода, если управление соединением осуществлялось с помощью инфраструктуры, такой как Spring.
В моем случае я использую Play Framework 2.1.4 и mySQL (развернут на Heroku с ClearDB). Я написал следующий код в файле Global.scala
:
override def onStart(app: Application) {
play.api.db.DB.getDataSource() match {
case ds: com.jolbox.bonecp.BoneCPDataSource => {
ds.setDisableConnectionTracking(true)
}
}
}
В дополнение к этому я также использую следующие параметры конфигурации БД:
db.default.partitionCount=1
db.default.maxConnectionsPerPartition=7
db.default.minConnectionsPerPartition=7
db.default.acquireIncrement=1
db.default.acquireRetryAttempts=1
db.default.acquireRetryDelay=5 seconds
db.default.connectionTimeout=30 seconds
db.default.idleMaxAge=1 minutes
db.default.idleConnectionTestPeriod=30 seconds
db.default.connectionTestStatement="SELECT 1"
db.default.maxConnectionAge=0
db.default.autoReconnect=true
db.default.disableConnectionTracking=true
Пока что это работает, но я не могу гарантировать, что проблема была полностью решена.
Надеюсь, это поможет