2013-04-30 12 views
6

W mojej aktualnej aplikacji mam pulę połączeń DBCP, która nie ma autoCommit JDBC = false set. Wygląda na to, że domyślnie autoCommit = true. To prawdopodobnie błąd, ale chciałbym zrozumieć wpływ zmiany tego parametru.Wiosna @ Transactional i JDBC autoCommit

Używam: - Wiosna z @Transactional adnotacji - wiosna partii z JDBC czytelników i pisarzy, w końcu niestandardowych tasklets korzystających JdbcTemplate

Chciałbym wiedzieć, czy Wiosna ma ustawione automatyczne zatwierdzanie = false na obecnym związku jeśli jest to w kontekście transakcji obsługiwanej przez TransactionManager. Czy zastępuje ustawienie domyślne? Ponieważ wydaje mi się, że ma to sens.

+0

Tak, robi. Spring zarządza nim za pomocą klasy implementacji adnotacji. – duffymo

+0

dziękuję, ale mógłbyś odpowiedzieć zamiast komentarza :) –

+2

Nic nie szkodzi. Wszyscy tutaj są ekspertami. Kiedy daję odpowiedź, mam ludzi, którzy mówią mi, że to powinien być komentarz. Komentuję, a ty mówisz mi, że to powinna być odpowiedź. Kogo to obchodzi? Czasami mam czas na odpowiedź, czasami nie. – duffymo

Odpowiedz

8

PlatformTransactionManager to interfejs, więc nie chciałbym powiedzieć, że wszystkie implementacje ustawiają AutoCommit = false, jednak najczęstsza implementacja (DataSourceTransactionManager) ustawia AutoCommit = false. patrz poniższy fragment kodu z metody 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); 

Teraz, jak wspomniano, ma to sens, aby to zrobić, albo nie będzie mieć segment wycofania do aktywacji cofnięcia dalej.

+0

dzięki za dowód :) –

Powiązane problemy