【问题标题】:Spring & JDBCTemplate : are resources automatically closed when using the underlying datasource?Spring & JDBCTemplate:使用底层数据源时资源会自动关闭吗?
【发布时间】:2014-09-13 07:30:22
【问题描述】:

我使用 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?

【问题讨论】:

  • 当您直接使用DataSource 时,spring 不会为您做任何事情。也许 JOOQ 正在为你做点什么,但 spring 肯定什么也没做。

标签: java spring datasource jdbctemplate jooq


【解决方案1】:

Spring 不会对 DataSource 生成的对象做任何事情,即 ConnectionPreparedStatementResultSet。从 Spring(或通常从 DataSource 的角度来看),您必须自己做。

但是,jOOQ 将始终:

通过设计,jOOQ 颠倒了 JDBC 的默认行为,即保持所有资源打开并让用户繁琐地显式关闭它们。 jOOQ 会急切地关闭所有资源(这是人们 95% 的时间所做的事情),并允许您在出于性能考虑有用的地方显式地保持资源打开。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 2015-09-19
    • 2012-03-24
    • 1970-01-01
    • 2015-05-04
    • 2023-03-03
    • 2011-01-10
    相关资源
    最近更新 更多