如何正确处理与 jooq 的连接?
Posted
技术标签:
【中文标题】如何正确处理与 jooq 的连接?【英文标题】:How to handle a connection properly with jooq? 【发布时间】:2021-10-23 20:28:11 【问题描述】:我在数据库中有很多不活动的会话,它们不仅占用了所有资源,而且偶尔会导致数据库崩溃,需要我重新启动它。
我正在将 jooq 与 kotlin 一起使用,这就是我建立连接的方式。
@Component
class EstDBConnection(private val cfg: DatabaseConfig, private val jooqExecuteListener: PromJooqExecuteListener)
init
cfg.migrateFlyway()
fun <T> acquire(f: (DSLContext) -> T): T
return DSL.using(DriverManager.getConnection(cfg.url, cfg.username, cfg.password), SQLDialect.ORACLE10G).use
jooqExecuteListener.attach(it)
f(it)
【问题讨论】:
【参考方案1】:您永远不会关闭您正在创建的连接。请使用连接池(例如HikariCP)来管理您的连接。除非您编写一个简单的批处理脚本或一些概念证明,否则您永远不应该直接使用DriverManager.getConnection
【讨论】:
@VladyslavMaksyk:不,但我可以推荐一个教程:baeldung.com/hikaricp,baeldung.com/java-connection-pooling 直接使用是什么意思,是不是应该放在try-catch语句中? 如果你直接使用它(DriverManager
),那么是的,你需要try-with-resources
(不仅仅是try-catch)来确保连接再次关闭。但是您可能真正需要的是一个连接池,因为连接到 Oracle 需要一些时间,您希望在线程之间共享这些资源。花点时间阅读这些概念(资源管理和连接池)。这些是非常重要的概念,尤其是在使用数据库时。以上是关于如何正确处理与 jooq 的连接?的主要内容,如果未能解决你的问题,请参考以下文章