2016-02-23 61 views
0

在为MyService我有以下:执行后groovy.sql.Sql.firstRow会关闭连接吗?

import groovy.sql.Sql 

class MyService { 
    Sql groovySql 

    def serviceMethod(){ 
    groovySql.firstRow("some query.....") 
    } 
} 

在resources.groovy groovySql注入如下:

groovySql(groovy.sql.Sql, ref('dataSource')) 

这是一个Grails 2.4.5应用。现在,问题是serviceMethod被调用时,连接是否自动关闭?

+1

是,https://github.com/apache/groovy/blob/GROOVY_2_4_X/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java#L1709 – dmahapatro

+0

@dmahapatro只发布结果集。它实际上并没有关闭连接。 – Armaiti

+0

@dmahapatro,你说得对,'protected final ResultSet execute()throws SQLException'确实释放连接。 – Armaiti

回答

3

如果需要,Sql中的每个方法都会创建并释放资源。

下的门面隐藏了与得到 连接,构建和配置语句,与 交互连接,关闭资源和错误记录相关细节的封面。

如果你创建一个SqlDataSource,它每次都会得到一个新的连接,并在操作结束时将其关闭。

如果我们使用的是数据源,我们还没有启用语句缓存,然后 严格地说最后close()方法并不需要 - 因为 是代表我们透明地执行所有的连接处理;然而,它并不伤害它,因为它会默默地返回 在这种情况下。

+0

有些情况下只有ResultSet被释放。你是什​​么意思“必要时释放资源”。在什么情况下它不是必要的? – Armaiti

+0

“有些情况下只有ResultSet正在发布”,哪一个?连接被分配给每个方法并在那之后关闭。但是,大多数数据源都在汇集数据源:当Sql发布数据源时,它们不会关闭底层数据源。 –

+0

此方法:public List rows(String sql,int offset,int maxRows,Closure metaClosure)throws SQLException'。但后来我发现'protected final ResultSet()throws SQLException'也会释放连接。我会接受这个答案。 – Armaiti

相关问题