2013-04-30 92 views
6

在我的實際應用程序中,我有一個沒有JDBC autoCommit = false set的DBCP連接池。它似乎有默認的autoCommit = true。 這可能是一個錯誤,但我想了解更改此參數的影響。Spring @Transactional和JDBC autoCommit

我使用: - 春天與@Transactional註釋 - Spring Batch的使用的JdbcTemplate

JDBC讀者和作家,最終定製任務蕾

我想知道,如果Spring並設置當前連接自動提交= FALSE如果它位於由TransactionManager處理的事務的上下文中。 它是否覆蓋默認設置?因爲在我看來,這樣做是有道理的。

+0

是的,它的確如此。 Spring使用註解實現類爲您管理它。 – duffymo 2013-04-30 13:38:51

+0

謝謝,但你可以回答而不是評論:) – 2013-04-30 14:22:56

+2

不在乎。這裏的每個人都是專家。當我給出答案時,我有人告訴我這應該是一個評論。我評論,你告訴我應該是一個答案。誰在乎?有時我有時間回答,有時候我沒有。 – duffymo 2013-04-30 16:35:38

回答

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

感謝您的證明:) – 2013-04-30 15:06:48