【问题标题】:Groovy SQL DataSource Connection handling, withTransactionGroovy SQL DataSource 连接处理,withTransaction
【发布时间】:2011-06-25 22:41:27
【问题描述】:

就连接处理而言,我对 groovy SQL 文档感到非常困惑。我需要了解最佳实践或如何正确处理底层连接。

假设我有一个这样的对象。

SqL sql = new Sql(dataSource);
sql.withTransaction {
 .....
}

现在我应该关闭连接吗? sql.close 在 finally 块中?或者我把它留在那里。

现在考虑一下:

SqL sql = Sql.newInstance (connection parameters);
sql.withTransaction {...}

现在需要sql.close() 吗?

现在这里是另一个变种。

Sql sql //(with any constructor).
Sql.//[do something] without a withTransaciton ...

这次我必须自己管理连接吗?或者我仍然可以在没有sql.close() 的情况下将其留在那里。

在上述任何情况下,我都在 Grails 服务中编写代码,该服务可能是事务性的,也可能不是事务性的。

谢谢。

【问题讨论】:

    标签: grails groovy connection datasource


    【解决方案1】:

    afaik,所有方法都自己处理连接。
    仅当您使用接收连接的构造函数时才应处理它。
    如果你不需要事务并且你想重用你colud使用的连接Sql#cacheConnection(Closure)

    【讨论】:

    • 重用连接?能否请您进一步说明一下?
    • 当您不使用 withTransaction 块时,会从数据源请求连接并在之后关闭。当您使用它时,仅在块结束后才返回连接。 cacheConnection 所做的是防止在没有自动提交的情况下模拟这一点,因此您可以使用相同的连接执行多个查询/插入,也许在中间手动执行一些提交/回滚。 groovy.sql.Sql 类的代码其实挺干净的,我觉得看它可以学到一些技巧
    • 是的,我现在明白了。还通过了 groovy 源代码。看起来合乎逻辑,毕竟 Groovy SQL 是 JDBC 的包装器,所以它的作用是帮助我们使用最少的样板代码,例如明确关闭连接。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多