【问题标题】:Does Spring's JdbcTemplate close the connection if an exception is thrown?如果抛出异常,Spring 的 JdbcTemplate 会关闭连接吗?
【发布时间】:2011-07-03 02:03:13
【问题描述】:

当 Spring 捕获 SQLException 时,它会在抛出它自己的 DataAccessException(运行时)异常之前关闭准备好的语句、结果集和/或连接吗?

我有一个开发人员想要创建一个 AOP 方面来捕获这些异常并记录和/或关闭连接。

@AfterThrowing(pointcut="dataAccessOperation()", throwing="exception")
public void doRecoveryActions(JoinPoint thisJoinPoint, DataAccessException exception) {
     // log and/or close connection
}

【问题讨论】:

    标签: java spring exception-handling jdbctemplate


    【解决方案1】:

    是的。

    这就是JdbcTemplate 的重点——它处理各种样板操作,包括释放所有资源。见12. Data access with JDBC

    【讨论】:

    • 该文档描述了翻译异常并谈到关闭连接,但没有具体说明它在捕获异常时关闭连接。这就是我在这里问的原因。
    • @Adam:是的,在这种情况下,文档似乎不是很冗长,但JdbcTemplate 实际上负责在异常情况下关闭连接(尽管与 Spring 管理的事务一起使用时,连接是实际上由事务管理器关闭,但没关系)。
    • 在未检查/运行时异常的情况下,jdbctemplate 是否也会清理并关闭连接?
    • 是的 - 它会捕获未经检查的/运行时异常并关闭连接,但前提是该异常未在堆栈的更高位置捕获。
    【解决方案2】:

    我认为您的开发人员应该看看springs transaction managemant 功能。您可以使用 AOP 来建议日志记录、回滚行为甚至 retry 或其他异常处理操作,以完全声明性地做出反应。

    【讨论】:

      猜你喜欢
      • 2017-02-24
      • 2011-08-27
      • 2014-09-18
      • 2012-09-28
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多