当前位置: 首页 > 知识库问答 >
问题:

使用Slick 3.1. x返回到HikariCP池的db连接

韩宜春
2023-03-14

我设置了一个光滑的数据库对象从类型安全配置像这样:

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。运行(someQuery)

第一个问题是,我需要做些什么来从池中获取连接,还是在调用db时在幕后发生这种情况。运行()

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

共有1个答案

徐卓
2023-03-14

第一个问题是,我需要做些什么来从池中获取连接,还是在调用db时在幕后发生这种情况。运行()?

这发生在幕后。

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

这也发生在幕后。

这是两个问题的相关代码。基本上,是获取一个会话,执行给定的操作(在您的情况下,某些查询),然后释放会话(关闭它)。深入研究代码,您可以看到JDBC实现创建了一个Base会话,它保存一个连接,并在调用关闭方法时关闭它。

此外,从文档中:

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

 类似资料:
  • 我正在尝试使用HikariCP连接池。我能够让它工作,并获得一个我可以使用的连接。我不确定将连接返回到池的最佳方法是什么。 我有以下问题: 我是否应该在完成后关闭连接,依赖idleTimeout和maxLifetime设置,或者是否可以使用另一个调用来避免占用池中的连接 如果我关闭连接(而不是返回池),是否会创建其他连接对象以满足连接池大小的要求 寻找有用的建议。

  • 使用来自DBCP的BasicDataSource,如果我们执行getConnection()并且在最后一个块中我们关闭连接,它是真的将连接返回到池还是关闭连接。我正在检查的代码片段是这样的 我正在检查BasicDataSource的源代码,并访问了这个包装类以获取连接。 委托对象的类型为java。sql。联系包装器代码调用委托的close方法,该方法将关闭集合,而不是将连接返回到池。这是DBCP的

  • 我正在使用hikaricp(这可能也适用于任何其他数据库连接池)。我有一个DBPool类,在其中我实例化了一个HikariDataSource(使用HikariConfig对象)。对于这个DBPool,我使用lazyholder习惯用法来限制每个VM一个池实例。但是,一旦获得对池的引用,就可以检索连接对象(无需任何进一步的锁/同步/信号量检查),因为我认为连接池会处理我的连接对象限制。每次通过数据

  • 地狱, 我是否可以获取HKARIP连接池度量信息,如总连接数、空闲连接数等? 我知道Hikaripool记录这样的信息: 清理前池统计数据库(总计=20,使用次数=0,可用次数=20,等待次数=0) 但是它太频繁了,我的代码无法控制它。我想在可配置的时间内记录这些信息,例如1分钟。顺便说一句,我用Scala Slick 3.0

  • 如果是真的,是否有人有任何书目,我可以阅读Hikaricp的默认属性。 ----------------添加---------------------------- 我在一本书中找到了以下信息: