Spring中事务管理浅谈

[java]

/**       * This implementation sets the isolation level but ignores the timeout.       */       @Override       protected void doBegin(Object transaction, TransactionDefinition definition) {           DataSourceTransactionObject txObject = (DataSourceTransactionObject) transaction;           Connection con = null;              try {               if (txObject.getConnectionHolder() == null ||                       txObject.getConnectionHolder().isSynchronizedWithTransaction()) {                   Connection newCon = this.dataSource.getConnection();                   if (logger.isDebugEnabled()) {                       logger.debug("Acquired Connection [" + newCon + "] for JDBC transaction");                   }                   txObject.setConnectionHolder(new ConnectionHolder(newCon), true);               }                  txObject.getConnectionHolder().setSynchronizedWithTransaction(true);               con = txObject.getConnectionHolder().getConnection();                  Integer previousIsolationLevel = DataSourceUtils.prepareConnectionForTransaction(con, definition);               txObject.setPreviousIsolationLevel(previousIsolationLevel);                  // Switch to manual commit if necessary. This is very expensive in some JDBC drivers,                // so we don't want to do it unnecessarily (for example if we've explicitly                // configured the connection pool to set it already).                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);                  int timeout = determineTimeout(definition);               if (timeout != TransactionDefinition.TIMEOUT_DEFAULT) {                   txObject.getConnectionHolder().setTimeoutInSeconds(timeout);               }                  // Bind the session holder to the thread.                if (txObject.isNewConnectionHolder()) {                   TransactionSynchronizationManager.bindResource(getDataSource(), txObject.getConnectionHolder());               }           }              catch (Exception ex) {               DataSourceUtils.releaseConnection(con, this.dataSource);               throw new CannotCreateTransactionException("Could not open JDBC Connection for transaction", ex);           }       }  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wydjyw.html