5

Javaアプリケーションを作成するためにPlay2.0.2を使用しています。数日間、問題が発生しています。〜100の要求の後、サーバーはこの例外のスローを開始します。

[[SQLException:利用可能な無料の接続を待機してタイムアウトしました。]]

Connectionwithの新しいインスタンスを作成しますDB.getConnection()。各リクエストのインスタンスは1つしかないため、インスタンスを閉じません。Connection私が知る限りConnection、アクティブなTCP接続が閉じられると、インスタンスは自動的に閉じられます。db.default.connectionTimeout値を上げようとしまし100 secondsたが、問題を解決できませんでした。次に、アクティブな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]
4

3 に答える 3

3

あなたはそれについて言及します:

各リクエストのインスタンスは1つしかないため、Connectionインスタンスを閉じません

それは間違っています、あなたはそれを閉じなければなりません、さもなければあなたはあなたが見る問題で終わるでしょう。

その理由は、ORM(EBeansまたはその他のJPA準拠)によって管理されている接続ではなく、直接JDBC接続を取得しているため、接続を閉じないと、接続がしばらくぶら下がっている可能性があるためです。

于 2012-12-03T11:54:40.990 に答える
1

DB.withConnectionを使用すると、接続が完了すると接続が閉じられます。

于 2012-12-03T13:41:08.173 に答える
0

データベースのPlayFrameworkJava実装は、次のようになります。

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();
}
于 2014-07-24T09:31:21.540 に答える