玩 2.1 Scala SQLException Connection Timed out waiting for a free available connection
Posted
技术标签:
【中文标题】玩 2.1 Scala SQLException Connection Timed out waiting for a free available connection【英文标题】:Play 2.1 Scala SQLException Connection Timed out waiting for a free available connection 【发布时间】:2013-12-04 21:37:38 【问题描述】:我已经在这个问题上工作了很长一段时间,但我找不到解决方案......
使用 h2 db(用于开发)和一个简单的模型包使用 play framework 2.2.1 构建的网络应用程序。 我正在尝试实现一个 REST JSON 端点并且代码可以工作......但每个服务器实例只有一次。
def createOtherModel() = Action(parse.json)
request =>
request.body \ "name" match
case _: JsUndefined => BadRequest(Json.obj("error" -> true,
"message" -> "Could not match name =(")).as("application/json")
case name: JsValue =>
request.body \ "value" match
case _: JsUndefined => BadRequest(Json.obj("error" -> true,
"message" -> "Could not match value =(")).as("application/json")
case value: JsValue =>
// this breaks the secod time
val session = ThinkingSession.dummy
val json = Json.obj(
"content" -> value,
"thinkingSession" -> session.id,
)
)
Ok(Json.obj("content" -> json)).as("application/json")
else
BadRequest(Json.obj("error" -> true,
"message" -> "Name was not content =(")).as("application/json")
所以基本上我读取 JSON,回显“值”值,创建模型 obj 并发送它的 id。
ThinkingSession.dummy
函数这样做:
def all(): List[ThinkingSession] =
// Tried explicitly closing connection, no difference
//val conn = DB.getConnection()
//try
// DB.withConnection implicit conn =>
// SQL("select * from thinking_session").as(ThinkingSession.DBParser *)
//
// finally
// conn.close()
//
DB.withConnection implicit conn =>
SQL("select * from thinking_session").as(ThinkingSession.DBParser *)
def dummy: ThinkingSession =
(all() head)
所以这应该做一个SELECT * FROM thinking_session
,从结果中创建一个模型obj列表并返回列表中的第一个。
这在服务器启动后第一次运行良好,但第二次我得到一个
play.api.Application$$anon$1: Execution exception[[SQLException: Timed out waiting for a free available connection.]]
at play.api.Application$class.handleError(Application.scala:293) ~[play_2.10.jar:2.2.1]
at play.api.DefaultApplication.handleError(Application.scala:399) [play_2.10.jar:2.2.1]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:261) [play_2.10.jar:2.2.1]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:261) [play_2.10.jar:2.2.1]
at scala.Option.map(Option.scala:145) [scala-library.jar:na]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2.applyOrElse(PlayDefaultUpstreamHandler.scala:261) [play_2.10.jar:2.2.1]
Caused by: java.sql.SQLException: Timed out waiting for a free available connection.
at com.jolbox.bonecp.DefaultConnectionStrategy.getConnectionInternal(DefaultConnectionStrategy.java:88) ~[bonecp.jar:na]
at com.jolbox.bonecp.AbstractConnectionStrategy.getConnection(AbstractConnectionStrategy.java:90) ~[bonecp.jar:na]
at com.jolbox.bonecp.BoneCP.getConnection(BoneCP.java:553) ~[bonecp.jar:na]
at com.jolbox.bonecp.BoneCPDataSource.getConnection(BoneCPDataSource.java:131) ~[bonecp.jar:na]
at play.api.db.DBApi$class.getConnection(DB.scala:67) ~[play-jdbc_2.10.jar:2.2.1]
at play.api.db.BoneCPApi.getConnection(DB.scala:276) ~[play-jdbc_2.10.jar:2.2.1]
我的 application.conf(数据库部分)
db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:file:database/[my_db]"
db.default.logStatements=true
db.default.idleConnectionTestPeriod=5 minutes
db.default.connectionTestStatement="SELECT 1"
db.default.maxConnectionAge=0
db.default.connectionTimeout=10000
最初在我的配置中设置的唯一内容是连接并且发生了错误。我在网上阅读该问题时添加了所有其他内容。
有趣的是,当我在内存数据库中使用 h2 时,它会在服务器启动后运行一次,然后失败。当我使用 h2 文件系统 db 时,它只工作一次,无论服务器实例如何。
谁能给我一些关于这个问题的见解?在bonecp问题上找到了一些东西并尝试升级到0.8.0-rc1但没有任何改变......我不知所措=(
【问题讨论】:
【参考方案1】:尝试设置 maxConnectionAge 和空闲超时
【讨论】:
尝试使用 maxConnectionAge=0 和 5 秒以及使用 idleTimeout=0 或更大,但它并没有改变任何东西 =(【参考方案2】:原来错误出在其他地方......这是一个很好的堆栈溢出......很长时间没有看到过。我尝试否决我的问题,但这是不可能的^^
【讨论】:
嗨 NemoOudeis。你能告诉我你是怎么解决这个问题的。即使我也面临同样的问题以上是关于玩 2.1 Scala SQLException Connection Timed out waiting for a free available connection的主要内容,如果未能解决你的问题,请参考以下文章
System.Data.SqlClient.SqlException:与 ASP.NET Core 2.1 和 SQL Server 组合的网络相关或实例 docker