0

Spring 的 DataSourceUtils 定义了一个应用事务超时的方法,而没有明确指定它。Javadoc 内容如下:

public static void applyTransactionTimeout(Statement stmt,
                                           DataSource dataSource)
                                    throws SQLException
Apply the current transaction timeout, if any, to the given JDBC Statement object.

我的问题是:

  1. 超时值从何而来?
  2. 为什么需要调用?如果事务是通过 Spring 获取的,无论如何都不会应用任何超时(或默认超时)?

谢谢你。

4

1 回答 1

0
  1. 价值来自当前交易,如果有的话(即@Transactional(..., timeout = ...))。

  2. SpringDataSourceUtils.getConnection()不代理它返回的连接,因此 Spring 不能将任何配置应用于Statement由这些连接自动创建的 s。

实际上,在 Spring 中使用 JDBC 的推荐方法是通过JdbcTemplate. JdbcTemplate是完全事务感知的,因此如果需要,它会在内部调用有问题的方法。

但是如果你需要使用原始Connection的JDBC,你可以使用这种方法来配置它们@Transactional(...),依此类推。

于 2012-11-06T16:05:06.910 回答