Возврат соединения БД с пулом HikariCP с помощью Slick 3.1.x

Я настраиваю гладкий объект базы данных из конфигурации typesafe следующим образом:

import com.typesafe.config.Config

class DatabaseService(configKey: String, config: Config) {
  val driver = slick.driver.MySQLDriver
  import driver.api._
  val db = Database.forConfig(configKey, config)
}

Объект конфигурации сообщает Slick использовать HikariCP, например:

db {
  numThreads = 5
  connectionTimeout = 30000
  maximumPoolSize = 26
  driver = "com.mysql.jdbc.Driver"
  url = "jdbc:mysql://localhost:3306/some_db?useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&useSSL=false"
  user = "root"
  password = "root"
  connectionPool = "HikariCP"
}

После создания экземпляра DatabaseService я могу выполнять запросы, запустив dbService.db.run(someQuery).

Первый вопрос: нужно ли мне что-то делать, чтобы получить соединение из пула, или это происходит за кулисами, когда я вызываю db.run()?

Во-вторых, как только этот запрос или запросы будут выполнены, как вернуть текущее соединение с базой данных в пул соединений?


person novon    schedule 06.07.2016    source источник


Ответы (1)


Первый вопрос: нужно ли мне что-то делать, чтобы получить соединение из пула, или это происходит за кулисами, когда я вызываю db.run()?

Это происходит за кулисами.

Во-вторых, как только этот запрос или запросы будут выполнены, как вернуть текущее соединение с базой данных в пул соединений?

Это также происходит за кулисами.

Вот соответствующий код для обоих вопросов. По сути, он получает сеанс, выполняет заданное действие (в вашем случае someQuery), а затем освобождает сеанс (закрывает его). Покопавшись еще немного в коде, вы увидите, что реализация JDBC создает BaseSession, который удерживает соединение, а также закрывает его при вызове метода close.

Кроме того, из документов:

Подключения к базе данных и транзакции управляются Slick автоматически. По умолчанию соединения устанавливаются и освобождаются по запросу и используются в режиме автоматической фиксации.

person marcospereira    schedule 07.07.2016
comment
Отлично, спасибо за ссылку на код в вашем ответе! Вы случайно не знаете, где я могу найти список полных параметров конфигурации для класса базы данных? Кажется, в документах его нет. - person novon; 07.07.2016
comment
В метод scaladocs, forConfig (необходимо расширить документацию по методу). Ссылка на него была здесь. - person marcospereira; 07.07.2016
comment
Ах, я полностью пропустил этот значок расширения. Спасибо еще раз! - person novon; 07.07.2016