我的应用中只有一个位置使用连接
它看起来像这样:
Connection conn = Db.getConnection();
try
{
// do some job
}
finally
{
conn.close();
}
因此,连接总是关闭的 但过了一段时间我总是得到比在bonecp config中定义的更多的连接 ...
问题:
这个问题有明确的解决方案吗?
可能是我应该尝试玩框架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 milliseconds db.default.connectionTimeout=50 milliseconds db.default.idleMaxAge=3 minutes db.default.idleConnectionTestPeriod=0 db.default.initSQL="SELECT 1" db.default.logStatements=true db.default.maxConnectionAge=10 minutes db.default.releaseHelperThreads=0
谢谢!
答案 0 :(得分:1)
另请查看poolThreshold参数。默认情况下,它设置为所有连接的20%(版本< 0.8,我从0.8及以上版本默认为零,因为它让很多人感到惊讶)。
华莱士
答案 1 :(得分:0)
我的理解是conn.close()并没有真正关闭连接。相反,它会将连接释放回连接池。连接池总是尝试将minConnections(在您的情况下为每个分区6个)连接到数据库。
这可能是“总是获得更多连接”的原因,但这是它应该有效的方式。
答案 2 :(得分: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
答案 3 :(得分:0)
在亚马逊上部署我的网站后,我一直面临同样的问题。
试用解决方案1
使用
Connection conn = Db.withConnection(); //instead of DB.getConnection()
如果这不起作用,请使用最新的BoneCp版本并将其添加到您的SBT中。 (显然,BoneCP处理Connection的方式存在问题。)
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页面。
如果这有助于你,请告诉我。