我有一个使用Groovy SQL调用存储过程的grails服务。
我正在使用dataSource
来初始化连接。
我的问题是:我是否需要手动关闭连接,还是由Groovy或GORM处理(因为我使用的是def dataSource
)?
以下是我的服务结构。
class MyService {
static transactional = Boolean.FALSE
private static final String STATEMENT_ONE_SQL = "{ call sp_One(?) }"
private static final String STATEMENT_TWO_SQL = "{ call sp_Two(?,?) }"
def dataSource
Sql sql
@PostConstruct
def initSql() {
sql = new Sql(dataSource)
}
List<GroovyRowResult> callSpOne(Integer id) {
List<GroovyRowResult> results = sql.rows(STATEMENT_ONE_SQL, [id])
return results
}
List<GroovyRowResult> callSpTwo(Integer id, String name) {
List<GroovyRowResult> results = sql.rows(STATEMENT_TWO_SQL, [id, name])
return results
}
答案 0 :(得分:1)
基于官方docs
最后,我们应该清理:
sql.close()
如果我们使用DataSource并且我们没有启用语句缓存,那么严格来说不需要最后的close()方法 - 因为所有连接处理都是代表我们透明地执行的;但是,把它放在那里并没有什么坏处,因为它会在那种情况下默默地返回。
如果使用withInstance代替newInstance,则会自动为您调用close()。