@Overridepublicfinalvoidrollback(TransactionStatus status)throws TransactionException {//事务已完成则抛异常//事务不能重复回滚和提交if(status.isCompleted()){thrownewIllegalTransactionStateException("Transaction is already completed - do not call commit or rollback more than once per transaction");}
DefaultTransactionStatus defStatus =(DefaultTransactionStatus) status;//回滚processRollback(defStatus,false);}
privatevoidprocessRollback(DefaultTransactionStatus status,boolean unexpected){try{//falseboolean unexpectedRollback = unexpected;try{//异步处理//忽略triggerBeforeCompletion(status);//是否有保存点//回滚到保存点if(status.hasSavepoint()){if(status.isDebug()){
logger.debug("Rolling back transaction to savepoint");}
status.rollbackToHeldSavepoint();}//是否是新事务elseif(status.isNewTransaction()){if(status.isDebug()){
logger.debug("Initiating transaction rollback");}//真正回滚//Connector.rollback//下文贴代码doRollback(status);}//如果不是新事务else{//是否有事务if(status.hasTransaction()){//GlobalRollbackOnParticipationFailure默认为trueif(status.isLocalRollbackOnly()||isGlobalRollbackOnParticipationFailure()){//设置LocalRollbackOnly为true,标记回滚//没有实际回滚doSetRollbackOnly(status);}else{if(status.isDebug()){
logger.debug("");}}}else{
logger.debug("");}if(!isFailEarlyOnGlobalRollbackOnly()){
unexpectedRollback =false;}}}catch(RuntimeException| Error ex){triggerAfterCompletion(status, TransactionSynchronization.STATUS_UNKNOWN);throw ex;}triggerAfterCompletion(status, TransactionSynchronization.STATUS_ROLLED_BACK);// Raise UnexpectedRollbackException if we had a global rollback-only markerif(unexpectedRollback){thrownewUnexpectedRollbackException("Transaction rolled back because it has been marked as rollback-only");}}finally{//清除事务//如果有旧事务,则重新使用旧事务cleanupAfterCompletion(status);}}
@Override public final void rollback(TransactionStatus status) throws TransactionException { //事务已完成则抛异常 //事务不能重复回滚和提交 if (status.isCompleted()) { throw new IllegalTransactionStateException( "Transaction is already completed - do not call comm