Search code examples
scalaconnection-poolingscalikejdbc

Release a Connection borrowed from ConnectionPool


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?

Solution

  • 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.