方法目的和Spring的DataSourceUtils.applyTransactionTimeout()使用什么值?

时间:2012-11-06 15:52:08

标签: spring spring-jdbc

Spring的DataSourceUtils定义了一个应用事务超时的method,而没有明确指定它。 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获取事务,那么无论如何都不会应用超时(或默认值)吗?
  3. 谢谢。

1 个答案:

答案 0 :(得分:0)

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

  2. Spring的DataSourceUtils.getConnection()不代理它返回的连接,因此Spring无法对这些连接自动创建的Statement应用任何配置。

  3. 实际上,在Spring中使用JDBC的推荐方法是通过JdbcTemplate来实现。 JdbcTemplate完全可以识别事务,因此如果需要,它会在内部调用相关方法。

    但是如果您需要使用原始JDBC Connection,则可以使用此方法根据@Transactional(...)等配置它们。