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、これらの接続によって作成されたに構成を自動的に適用することはできません。

実際、SpringでJDBCを使用するための推奨される方法は、を介して行うことJdbcTemplateです。JdbcTemplateは完全にトランザクションを認識しているため、必要に応じて問題のメソッドを内部的に呼び出します。

ただし、生のJDBCを使用する必要がある場合Connectionは、このメソッドを使用して、などに従ってそれらを構成できます@Transactional(...)

于 2012-11-06T16:05:06.910 に答える