2013-04-30 16 views
6

私の実際のアプリケーションでは、JDBC autoCommit = falseが設定されていないDBCP接続プールがあります。それはデフォルトのautoCommit = trueを持っているようです。 これはおそらく間違いですが、このパラメータを変更した場合の影響を理解したいと思います。Spring @TransactionalとJDBC autoCommit

私が使用しています: - @Transactional注釈 と春 - JdbcTemplate

を使用してJDBCリーダーやライター、最終的にカスタムタスクレットと春のバッチ

私は春が現在の接続のautoCommitが= falseを設定しないかどうかを知りたい それがTransactionManagerによって処理されるトランザクションのコンテキスト内にある場合 デフォルト設定を上書きしますか?それは私には思われるので、そうするのが理にかなっています。

+0

はい、あります。 Springは、アノテーションの実装クラスでそれを管理します。 – duffymo

+0

ありがとう、しかし、あなたはコメントの代わりに答えている可能性があります:) –

+2

気にしないでください。ここの誰もが専門家です。私が答えを与えるとき、私はそれがコメントでなければならないと私に言っている人々を持っています。私はコメントし、あなたはそれが答えであるべきだと私に言う。誰も気にしない?時々私は答える時間があります、時には私はしません。 – duffymo

答えて

8

PlatformTransactionManagerはインターフェイスなので、すべての実装でAutoCommit = falseが設定されているとは言いませんが、最も一般的な実装(DataSourceTransactionManager)ではAutoCommit = falseが設定されます。 doBeginメソッドから以下のコードを参照してください。

if (con.getAutoCommit()) { 
      txObject.setMustRestoreAutoCommit(true); 
      if (logger.isDebugEnabled()) { 
       logger.debug("Switching JDBC Connection [" + con + "] to manual commit"); 
      } 
      con.setAutoCommit(false); 
     } 
     txObject.getConnectionHolder().setTransactionActive(true); 

を今、あなたが述べたように、それがそうするように完璧な理にかなっているか、あなたがロールバックを有効にするには、ロールバック・セグメントを持っていないでしょう。

+0

証明ありがとう:) –