2013-04-30 20 views
6

Nella mia applicazione effettiva, ho un pool di connessioni DBCP che non ha JDBC autoCommit = false set. Sembra avere il predefinito autoCommit = true. Questo è probabilmente un errore, ma mi piacerebbe capire l'impatto della modifica di questo parametro.Spring @Transactional e JDBC autoCommit

sto usando: - Primavera con @Transactional annotazione - Primavera batch con i lettori e scrittori JDBC, infine tasklets personalizzati utilizzando JdbcTemplate

Vorrei sapere se primavera non impostato autoCommit = false sulla connessione corrente se è nel contesto di una transazione gestita dal TransactionManager. Sostituisce l'impostazione predefinita? Perché mi sembra che abbia senso farlo.

+0

Sì, lo fa. Spring lo gestisce per te con la classe di implementazione dell'annotazione. – duffymo

+0

grazie ma avresti potuto rispondere invece di un commento :) –

+2

Non importa. Tutti qui intorno è un esperto. Quando do una risposta, ho delle persone che mi dicono che dovrebbe essere un commento. Io commento, e tu mi dici che dovrebbe essere una risposta. Che importa? A volte ho il tempo di rispondere, a volte no. – duffymo

risposta

8

PlatformTransactionManager è un'interfaccia, quindi non direi che tutte le implementazioni impostano AutoCommit = false, tuttavia l'implementazione più comune (DataSourceTransactionManager) imposta AutoCommit = false. vedi frammento di codice di seguito dal metodo 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); 

Ora, come lei ha affermato, ha perfettamente senso per farlo, altrimenti non avrebbe un segmento di rollback per attivare un rollback su.

+0

grazie per la prova :) –

Problemi correlati