释放从 ConnectionPool 借来的 Connection

Release a Connection borrowed from ConnectionPool

ScalikeJDBC's ConnectionPool docs page 说:


Borrowing Connections

Simply just call #borrow method.

import scalikejdbc._
val conn: java.sql.Connection = ConnectionPool.borrow()
val conn: java.sql.Connection = ConnectionPool('named).borrow()

Be careful. The connection object should be released by yourself.


但是没有提到如何去做。

我总是可以做到 Connection.close() 但是通过'释放' Connection, 我知道我应该 return Connection 回到 ConnectionPool 而不是 close它(否则将违背 ConnectionPool 的目的)。


我的疑惑是:

  1. 一般来说,'releasing' a Connection (that has been borrowed from ConnectionPool) 是什么意思?
  2. ScalikeJDBC中,如何从ConnectionPool'release'Connection

调用 close 没问题。根据 Oracle 文档:Closing a connection instance that was obtained from a pooled connection does not close the physical database connection.。 scalikejdbc 中的 DBConnection 只是包装 java.sql.Connection 并将调用委托给 close。使用 scalikejdbc 执行此操作的通常方法是使用 using 函数,该函数本质上是 Java 的 try-with-resources.

的实现

有关 JDBC 的类似讨论,请参阅 Closing JDBC Connections in Pool

再次查看 docs 后,ScalikeJdbc 确实提供了一个 using 方法来实现 loan-模式 自动 returns connectionConnectionPool

所以你可以一个连接,使用它,return它到如下:

import scalikejdbc.{ConnectionPool, using}
import java.sql.Connection

using(ConnectionPool.get("poolName").borrow()) { (connection: Connection) =>
    // use connection (only once) here
}
// connection automatically returned to pool