2

我的应用程序中只有一个地方使用了连接。
它看起来像这样:

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

所以,连接总是关闭的。
但是一段时间后,我总是得到比bonecp配置中定义的更多的连接......

问题:
这个问题有明确的解决方案吗?
也许我应该尝试玩框架 2.1?

我真的无法理解有些人如何毫无问题地使用该框架......

配置:

db.default.autocommit=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

我的理解是 conn.close() 并没有真正关闭连接。相反,它将连接释放回连接池。连接池始终尝试将 minConnections(在您的情况下,每个分区 6 个)连接到数据库。

这可能是“总是获得更多联系”的原因,但这是他们应该工作的方式。

于 2012-12-10T10:38:26.000 回答
0

在亚马逊上部署我的网站后,我一直面临同样的问题。

试用解决方案 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 回答