2

私のアプリには、接続を使用する場所が 1 つだけあります。
次のようになります。

Connection conn = Db.getConnection();
try
{
    // do some job
}
finally
{
    conn.close();
}

したがって、接続は常に閉じられています。
しかし、しばらくすると、bonecp config で定義されているよりもはるかに多くの接続が常に取得されます...

質問:
その問題の明確な解決策はありますか?
フレームワーク 2.1 を試してみる必要がありますか?

一部の人々がそのフレームワークを問題なく使用する方法を本当に理解できません...

構成:

デシベル。デフォルト。自動コミット = true
db.default.isolation=READ_COMMITTED

db.default.partitionCount=3
db.default.minConnectionsPerPartition=6
db.default.maxConnectionsPerPartition=12
db.default.acquireIncrement=1

db.default.acquireRetryAttempts=5
db.default.acquireRetryDelay=50 ミリ秒

db.default.connectionTimeout=50 ミリ秒
db.default.idleMaxAge=3 分

db.default.idleConnectionTestPeriod=0
db.default.initSQL="SELECT 1"

db.default.logStatements = true
db.default.maxConnectionAge=10 分

db.default.releaseHelperThreads=0

ありがとう!

4

4 に答える 4

1

また、poolThreshold パラメータも見てください。デフォルトでは、これはすべての接続の 20% に設定されています (バージョン < 0.8 では、多くの人を驚かせるため、0.8 以降ではゼロにデフォルト設定しました)。

ウォレス

于 2012-12-10T11:25:09.477 に答える
0

BoneCP 0.8.0-rc1を試して、次の構成を使用してください。

db.default.idleMaxAge=10 minutes
db.default.idleConnectionTestPeriod=35 seconds
db.default.connectionTimeout=20 second
db.default.connectionTestStatement="SELECT 1"
db.default.maxConnectionAge=30 minutes
于 2013-03-15T14:40:06.083 に答える
0

Amazon にウェブサイトを展開した後、同じ問題に直面しています。

試用版 1

使用する

Connection conn = Db.withConnection(); //instead of DB.getConnection()

それが機能しない場合は、最新の BoneCp バージョンを使用して、これを SBT に追加してください。(どうやら、BoneCP が接続を処理する方法に問題があったようです。)

val appDependencies = Seq(
"com.jolbox" % "bonecp" % "0.8.0-rc2-SNAPSHOT-20130712-14382677.jar",
....

val main = PlayProject(appName, appVersion, appDependencies, mainLang = JAVA).settings(
  libraryDependencies += "com.jolbox" % "bonecp" % "0.8.0-rc2-SNAPSHOT-20130712-14382677.jar" from "https://dl.dropboxusercontent.com/u/36714110/libraries/bonecp-patches/bonecp-0.8.0-rc2-SNAPSHOT-20130712-14382677.jar"
,resolvers += ...

この問題について言及しているboneCP GitHubページを参照してください。

そして、これがあなたを助けるかどうか私に知らせてください.

于 2014-08-15T02:48:49.027 に答える
0

私の理解では、 conn.close() は実際には接続を閉じません。代わりに、接続を解放して接続プールに戻します。接続プールは常に、パーティションごとに 6 つの場合、データベースへの minConnections を持つことを試みます。

これが「常により多くの接続を取得する」理由かもしれませんが、これが機能するはずの方法です。

于 2012-12-10T10:38:26.000 に答える