我正在使用Play Framework 2.0.4
在java中构建应用。该应用程序部署在heroku
中,带有cleardb数据库。
用户不断收到此错误:
PlayException: Execution exception [[PersistenceException: java.sql.SQLException: Timed out waiting for a free available connection.]]
at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:134)
at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:115)
at akka.actor.Actor$class.apply(Actor.scala:318)
at play.core.ActionInvoker.apply(Invoker.scala:113)
at akka.actor.ActorCell.invoke(ActorCell.scala:626)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:197)
at akka.dispatch.Mailbox.run(Mailbox.scala:179)
at akka.dispatch.ForkJoinExecutorConfigurator$MailboxExecutionTask.exec(AbstractDispatcher.scala:516)
at akka.jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:259)
at akka.jsr166y.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:975)
at akka.jsr166y.ForkJoinPool.runWorker(ForkJoinPool.java:1479)
at akka.jsr166y.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)
Caused by: javax.persistence.PersistenceException: java.sql.SQLException: Timed out waiting for a free available connection.
at com.avaje.ebeaninternal.server.transaction.TransactionManager.createQueryTransaction(TransactionManager.java:356)
at com.avaje.ebeaninternal.server.core.DefaultServer.createQueryTransaction(DefaultServer.java:2021)
at com.avaje.ebeaninternal.server.core.OrmQueryRequest.initTransIfRequired(OrmQueryRequest.java:241)
at com.avaje.ebeaninternal.server.core.DefaultServer.findId(DefaultServer.java:1212)
at com.avaje.ebeaninternal.server.core.DefaultServer.find(DefaultServer.java:1118)
at com.avaje.ebeaninternal.server.core.DefaultServer.find(DefaultServer.java:1105)
at play.db.ebean.Model$Finder.byId(Model.java:237)
现在情况越来越糟,有时所有用户每次都会遇到相同的错误,直到我在heroku中重新启动应用程序。
有任何调试帮助或提示吗?
答案 0 :(得分:5)
我认为问题与Heroku/Play/BoneCp connection issues
相同Heroku在30秒后关闭连接。
答案 1 :(得分:2)
在Build.scala和
上添加boneCp 0.8.0.rc1之后db.default.idleMaxAge=10 minutes
db.default.idleConnectionTestPeriod=30 seconds
db.default.connectionTimeout=20 second
db.default.connectionTestStatement="SELECT 1"
db.default.maxConnectionAge=30 minutes
但我仍然遇到超时错误,特别是当我离开页面然后点击刷新时。
答案 2 :(得分:2)
我遇到了同样的问题。当你的Play应用程序中有一个巨大的reuqest线程并且游戏无法维护数据库池时,就会出现这个问题。为了让Play游戏保持舒适,你需要添加以下三个指向你的aplliaction.conf文件
答案 3 :(得分:0)
你也有这个问题,你设法解决了吗? 我在网上搜索了这个。 他们都说您没有关闭与数据库的连接。 但我根本不打开它们,我的意思就是为我做这个。 他们还发现代码关闭仅适用于scala ..
我找到的最后一个“解决方案”,但它不能100%工作,在配置文件中。 http://www.playframework.com/documentation/2.0/SettingsJDBC