【问题标题】:Spring framework to pass Connection object to legacy codeSpring框架将连接对象传递给遗留代码
【发布时间】:2011-10-04 16:18:51
【问题描述】:

我使用的是 Spring JDBC 3.0.6。我也有使用普通 JDBC 的遗留代码。遗留代码中有一些方法需要 java.sql.Connection 对象。我想从我的 Spring 代码中调用这个方法。如何传递 java.sql.Connection 对象?

如果我从数据源中获取连接对象,那么我需要管理此连接的返回/释放。我不能只获取事务中的连接对象的引用吗?

我正在使用基于注释的配置和基于 aop 的声明性事务。

【问题讨论】:

    标签: java spring spring-jdbc


    【解决方案1】:

    使用JdbcTemplate.execute(ConnectionCallback)。连接回调将访问由 Spring 自动打开、关闭并关联到当前事务的连接。

    【讨论】:

      【解决方案2】:

      使用DataSourceUtils.getConnection 方法,这将检索与事务关联的连接。使用DataSourceUtils.releaseConnection 释放它(如果连接是与事务关联的连接,则为 noop。

      如果旧代码具有用于打开/关闭连接的实用程序类 - 您只需修改它以使用 DataSourceUtils 函数。

      【讨论】:

      • 这对我不起作用,因为我不想写发布连接。由于 spring 提供了所有的连接处理,我想远离它。
      • 如果您确定您检索的连接是与 Transaction 关联的连接,则不必调用 releaseConnection。
      • 我怎么知道?我使用了 DataSourceUtils.getConnection(datasource) 并传递了数据源引用。我得到了连接,但连接从未返回。
      • 调用需要在 Spring 托管事务的上下文中进行(由 @Transactional 注释的方法)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-20
      • 1970-01-01
      • 1970-01-01
      • 2014-08-07
      • 1970-01-01
      • 2013-11-19
      相关资源
      最近更新 更多