【发布时间】:2018-06-05 03:17:49
【问题描述】:
我使用 JOOQ 来查询我的关系数据库,我最近一直在研究连接处理,这让我有点困惑。我试过阅读 JavaDoc 和这个:When is a Connection closed when calling JooQ DSLContext's .close(), if at all?,但它为我创造了更多的 FUD。
目前我的代码是这样做的:
try (final Connection cn = pool.getConnection()) {
DSLContext dsl = DSL.using(cn, MARIADB);
// query stuff
}
本质上,我将 JOOQ 视为根本不进行连接处理的查询器。这段代码我从来没有遇到过问题。
但是,我确实收到了来自 IntelliJ 的警告,说 DSLContext 是 AutoClosable 并且应该由 try-with-resources 处理。我知道在这种情况下不必这样做,但我的第一个问题是“可以吗?”。用这个代替上面的代码是否安全:
try (final DSLContext dsl = DSL.using(pool.getConnection(), MARIADB)) {
// query stuff
}
另一个 StackOverflow 帖子说,当您使用其中一种帮助方法创建 DSLContext 时,您需要在 DSLContext 上使用 close()。但是如果你只是传入了 Connection 对象呢? close() 还会关闭我的连接吗?
我还发现 DSL 有另一个 using() 允许您分配整个数据源。所以我也可以这样做:
final DSLContext dsl = DSL.using(pool, MARIADB);
然后完全忽略所有的 try-with-resources。这里有什么取舍?有吗?
IntelliJ 进一步抱怨了具有 AutoClosable 接口(继承自 Query)的 UpdateQuery。是否有必要关闭我的查询?我一直只是调用 execute() 并毫无问题地关闭了底层连接。
【问题讨论】:
标签: java intellij-idea connection jooq try-with-resources