如何正确处理与 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 的连接?的主要内容,如果未能解决你的问题,请参考以下文章

在 jOOq 中,为啥连接与语句构造高度耦合?

如何从反应式 MariaDB 连接创建 JOOQ DSLContext

记录真实的 JDBC 连接并生成 Jooq 模拟文件

如何在jooq查询的左连接中检查记录是不是完​​全为空

Jooq 事务:如果事务中抛出异常,则连接不会释放到池中

连接多个表并选择共同字段时返回自定义 JOOQ 记录