Release a Connection borrowed from ConnectionPool

佐手、 提交于 2019-12-11 16:09:14

问题


ScalikeJDBC's ConnectionPool docs page says:


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.


However there's no mention of how to do it.

I can always do Connection.close() but by 'releasing' Connection, I understand that I'm supposed to return the Connection back to the ConnectionPool and not close it (otherwise the purpose of having a ConnectionPool would be defied).


My doubts are:

  1. In general, what does 'releasing' a Connection (that has been borrowed from ConnectionPool) mean?
  2. In ScalikeJDBC, how do I 'release' a Connection borrowed from ConnectionPool?

回答1:


Calling close is fine. As per the Oracle docs: Closing a connection instance that was obtained from a pooled connection does not close the physical database connection.. The DBConnection in scalikejdbc just wraps the java.sql.Connection and delegates calls to close. The usual way of doing this with scalikejdbc is with the using function which is essentially an implementation of Java's try-with-resources.

See Closing JDBC Connections in Pool for a similar discussion on JDBC.




回答2:


Upon a second look into the docs, ScalikeJdbc does provide a using method implementing the loan-pattern that automatically returns the connection to the ConnectionPool.

So you can borrow a connection, use it, and return it to the pool as follows:

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


来源:https://stackoverflow.com/questions/50057254/release-a-connection-borrowed-from-connectionpool

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!