Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Play2.0返回“;SQLException:等待可用的免费连接时超时。”;_Java_Playframework_Playframework 2.0_Bonecp - Fatal编程技术网

Java Play2.0返回“;SQLException:等待可用的免费连接时超时。”;

Java Play2.0返回“;SQLException:等待可用的免费连接时超时。”;,java,playframework,playframework-2.0,bonecp,Java,Playframework,Playframework 2.0,Bonecp,我一直在使用Play2.0.2来创建Java应用程序。有几天我遇到了一个问题。约100次请求后,服务器开始引发此异常: [[SQLException:等待可用连接时超时。]] 我使用DB.getConnection()创建了一个新的Connection实例。我不会关闭连接实例,因为每个请求只有一个实例,据我所知,当活动TCP连接关闭时,它会自动关闭连接实例。 我试图将db.default.connectionTimeout值增加到100秒,但无法解决问题。然后我检查了活动的Postgresql连

我一直在使用Play2.0.2来创建Java应用程序。有几天我遇到了一个问题。约100次请求后,服务器开始引发此异常:

[[SQLException:等待可用连接时超时。]]

我使用
DB.getConnection()
创建了一个新的
Connection
实例。我不会关闭
连接
实例,因为每个请求只有一个实例,据我所知,当活动TCP连接关闭时,它会自动关闭
连接
实例。 我试图将
db.default.connectionTimeout
值增加到
100秒
,但无法解决问题。然后我检查了活动的Postgresql连接,但没有活动的连接。我还重新启动了Postgresql,但它也无法解决问题

目前这个问题的唯一解决方案是杀死Play20实例并启动一个新实例

以下是创建的日志Play2.0:

! @6cg9il6ki - Internal server error, for request [GET [AN URL]] ->

play.core.ActionInvoker$$anonfun$receive$1$$anon$1: Execution exception [[SQLException: Timed out waiting for a free available connection.]]
        at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:134) [play_2.9.1.jar:2.0.2]
        at play.core.ActionInvoker$$anonfun$receive$1.apply(Invoker.scala:115) [play_2.9.1.jar:2.0.2]
        at akka.actor.Actor$class.apply(Actor.scala:318) [akka-actor.jar:2.0.2]
        at play.core.ActionInvoker.apply(Invoker.scala:113) [play_2.9.1.jar:2.0.2]
        at akka.actor.ActorCell.invoke(ActorCell.scala:626) [akka-actor.jar:2.0.2]
        at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:197) [akka-actor.jar:2.0.2]
Caused by: java.sql.SQLException: Timed out waiting for a free available connection.
        at com.jolbox.bonecp.BoneCP.getConnection(BoneCP.java:503) ~[bonecp.jar:0.7.1.RELEASE]
        at com.jolbox.bonecp.BoneCPDataSource.getConnection(BoneCPDataSource.java:114) ~[bonecp.jar:0.7.1.RELEASE]
        at play.api.db.DBApi$class.getConnection(DB.scala:64) ~[play_2.9.1.jar:2.0.2]
        at play.api.db.BoneCPApi.getConnection(DB.scala:273) ~[play_2.9.1.jar:2.0.2]
        at play.api.db.DB$$anonfun$getConnection$1.apply(DB.scala:129) ~[play_2.9.1.jar:2.0.2]
        at play.api.db.DB$$anonfun$getConnection$1.apply(DB.scala:129) ~[play_2.9.1.jar:2.0.2]
你提到:

我不会关闭连接实例,因为只有一个 每个请求的实例

这是错误的,你必须关闭它,否则你最终会遇到你看到的问题


原因是您获得的是直接JDBC连接,而不是由ORM管理的连接(EBeans或其他符合JPA的连接),因此如果不关闭它,连接可能会挂起一段时间。

使用DB.withConnection,一旦连接完成,它就会关闭连接。

用于数据库的Play framework Java实现应该是这样的

try{
      Ebean.beginTransaction();

      // your code goes here
      // if all things go fine 
       Ebean.commitTransaction();


}catch (Exception e){
      //got error so log it.
      e.printStackTrace();

}finally{
      //End the transactions started
      Ebean.endTransaction();
}

好的,您必须在使用后关闭连接(例如在
finally
块中),DB.withConnection似乎仅适用于Scala。@嗨,Pere Villega,我也有同样的问题,请您解决这个问题。。我正在使用ORM,但仍然面临这个问题。