【问题标题】:How to handle a connection properly with jooq?如何正确处理与 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)
        }
    }
}

【问题讨论】:

    标签: oracle kotlin session connection jooq


    【解决方案1】:

    您永远不会关闭您正在创建的连接。请使用连接池(例如HikariCP)来管理您的连接。除非您编写一个简单的批处理脚本或一些概念证明,否则您永远不应该直接使用DriverManager.getConnection

    【讨论】:

    • @VladyslavMaksyk:不,但我可以推荐一个教程:baeldung.com/hikaricpbaeldung.com/java-connection-pooling
    • 直接使用是什么意思,是不是应该放在try-catch语句中?
    • 如果你直接使用它(DriverManager),那么是的,你需要try-with-resources(不仅仅是try-catch)来确保连接再次关闭。但是您可能真正需要的是一个连接池,因为连接到 Oracle 需要一些时间,您希望在线程之间共享这些资源。花点时间阅读这些概念(资源管理和连接池)。这些是非常重要的概念,尤其是在使用数据库时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 2014-07-04
    相关资源
    最近更新 更多