春天& JDBCTemplate:使用基础数据源时是否自动关闭资源?

时间:2014-07-22 12:56:37

标签: 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?

1 个答案:

答案 0 :(得分:2)

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

然而,jOOQ将始终:

按照设计,jOOQ反转了JDBC的默认行为,即保持所有资源的开放,让用户明确地将它们单调地关闭。 jOOQ急切地关闭所有资源(人们95%的时间都这样做),并且允许您明确地保持资源开放,这对性能原因有用。

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