java - Spring & JDBCTemplate : are resources automatically closed when using the underlying datasource?

标签 java spring datasource jdbctemplate jooq

我使用 Spring 和 JDBC 模板来管理数据库访问,但使用 JOOQ 构建实际的 SQL 查询。例如,一个 DAO 可能如下所示:

public List<DrupalTaxonomyLocationTerm> getLocations(String value, String language) throws DataAccessException {

    DSLContext ctx = DSL.using(getJdbcTemplate().getDataSource(), SQLDialect.MYSQL);
    SelectQuery q = ctx.selectQuery();
    q.addSelect(field("entity_id").as("id"),);
    q.addFrom(table("entity").as("e"));

    [...]

}

正如您从上面看到的,我正在使用 JOOQ 构建和执行查询。 Spring 是否仍然负责关闭我从 JOOQ 返回的 ResultSet,或者当我直接访问数据源并将数据源传递给 JOOQ 时,我是否以某种方式“绕过”Spring?

最佳答案

Spring 不会对从 DataSource 生成的对象执行任何操作,即 ConnectionPreparedStatementResultSet >。从 Spring(或者通常从 DataSource 角度)来看,您必须自己执行此操作。

但是,jOOQ 始终会:

按照设计,jOOQ 与 JDBC 的默认行为相反,即保持所有资源打开并让用户显式地单调地关闭它们。 jOOQ 急切地关闭所有资源(这是人们 95% 的时间所做的),并允许您在出于性能原因有用的情况下显式保持资源打开。

See this page of the jOOQ manual for differences between jOOQ and JDBC .

关于java - Spring & JDBCTemplate : are resources automatically closed when using the underlying datasource?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24888042/

相关文章:

java - 打开 PDF 到特定页面

java - 如何用 Controller 接受所有请求类型?

php - 我正在寻找英语单词列表

java - 池大小的理想背景验证毫秒值约为 50

java - Webservice调用返回错误500

java - 无法从 Java 连接到 MySQL : NullPointerException inside MySQL driver connection logic

java - 使用 while 循环来分隔字符串

java - 创建 SessionFactory 时出现错误

java - 为什么多个 PropertyPlaceholderConfigurer 不起作用?

c# - 在 WinForms 的 ReportViewer 中切换数据源