2013-04-30 19 views
6

Auf meiner tatsächlichen Anwendung habe ich einen DBCP-Verbindungspool, der JDBC autoCommit = false nicht enthält. Es scheint den Standardwert autoCommit = true zu haben. Dies ist wahrscheinlich ein Fehler, aber ich würde gerne die Auswirkungen der Änderung dieses Parameters verstehen.Spring @Transactional und JDBC autoCommit

Ich verwende: - Frühling mit @Transactional Anmerkung - Spring Batch mit JDBC-Leser und Schreiber, schließlich benutzerdefinierte Tasklets JdbcTemplate mit

Ich mag würde wissen, ob Frühling nicht gesetzt autoCommit = false auf die aktuelle Verbindung wenn es sich um eine Transaktion handelt, die vom TransactionManager bearbeitet wird. Überschreibt es die Standardeinstellung? Weil es mir scheint, dass es sinnvoll ist, dies zu tun.

+0

Ja, tut es. Spring verwaltet es für Sie mit der Annotation-Implementierungsklasse. – duffymo

+0

danke, aber Sie könnten statt eines Kommentars beantwortet haben :) –

+2

Egal. Jeder hier ist ein Experte. Wenn ich eine Antwort gebe, habe ich Leute, die mir sagen, dass es ein Kommentar sein sollte. Ich kommentiere, und Sie sagen mir, es sollte eine Antwort sein. Wen interessiert das? Manchmal habe ich Zeit zu antworten, manchmal nicht. – duffymo

Antwort

8

PlatformTransactionManager ist eine Schnittstelle, daher würde ich nicht sagen, dass alle Implementierungen AutoCommit = false gesetzt haben, aber die am häufigsten verwendete Implementierung (DataSourceTransactionManager) setzt AutoCommit = false. siehe Code-Schnipsel aus der unten stehenden doBegin Methode:

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); 

Nun, wie Sie gesagt, es Sinn macht, dies zu tun, oder Sie würde kein Rollback-Segment haben einen Rollback auf aktivieren.

+0

danke für den Beweis :) –

Verwandte Themen