Освободить соединение, заимствованное из ConnectionPool - PullRequest
0 голосов
/ 27 апреля 2018

ScalikeJDBC's ConnectionPool страница документов говорит:


Заимствованные соединения

Просто вызовите #borrow метод.

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

Будь осторожен. Объект подключения должен быть освобожден самостоятельно.


Однако нет никаких упоминаний о том, как это сделать.

Я всегда могу сделать Connection.close(), но ' выпустив ' Connection, Я понимаю, что я должен вернуть Connection обратно ConnectionPool, а не закрыть его (в противном случае цель ConnectionPool будет отвергнута).


Мои сомнения:

  1. В общем, что означает ' выпуск ' Connection (заимствованный из ConnectionPool)?
  2. В ScalikeJDBC, как мне «освободить» Connection заимствованных из ConnectionPool?

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

После второго просмотра документов , ScalikeJdbc предоставляет метод using, реализующий шаблон ссуды , который автоматически возвращает connection к ConnectionPool.

Таким образом, вы можете одолжить a соединение , использовать его и вернуть в пул следующим образом:

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
0 голосов
/ 28 апреля 2018

Звонить close нормально. Согласно документации Oracle: Closing a connection instance that was obtained from a pooled connection does not close the physical database connection.. DBConnection в scalikejdbc просто оборачивает java.sql.Connection и делегирует вызовы close. Обычный способ сделать это с помощью scalikejdbc - использовать функцию using, которая, по сути, является реализацией Java try-with-resources.

См. Закрытие JDBC-соединений в пуле для аналогичного обсуждения JDBC.

...