使用Slick 3.1.x将数据库连接返回到HikariCP池

nov*_*von 5 scala hikaricp slick-3.0

我正在从typesafe配置中设置一个光滑的Database对象,如下所示:

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)
}
Run Code Online (Sandbox Code Playgroud)

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"
}
Run Code Online (Sandbox Code Playgroud)

实例化DatabaseService之后,我可以通过运行来运行查询dbService.db.run(someQuery)

第一个问题是我需要做一些事情以从池中获得连接,还是在调用时在幕后发生db.run()

其次,一旦执行了一个或多个查询,如何将当前数据库连接返回到连接池?

mar*_*ira 6

第一个问题是我需要做些什么来从池中获得连接,还是在调用db.run()时在后台发生?

那是在幕后发生的。

其次,一旦执行了一个或多个查询,如何将当前数据库连接返回到连接池?

那也发生在幕后。

这是两个问题相关代码。基本上,是获取一个会话,执行给定的操作(在您的情况下为someQuery),然后释放该会话(将其关闭)。挖多一点的代码,你可以看到,JDBC实现创建一个BaseSession持有的连接,并关闭调用它的关闭方法

另外,从docs

数据库连接和事务由Slick自动管理。默认情况下,连接是按需获取和释放的,并在自动提交模式下使用。