Spring编程式事务处理

  Spring 提供两种事务处理方式,一种是编程式事务处理;一种是声明式事务处理。如果需要大量的事务处理,就用声明式事务处理,如果很少的事务处理,就用编程式。

编程式事务:
使用TransactionTemplate进行事务处理(Spring进行commit和rollback),原型定义如下:

public class TransactionTemplate extends DefaultTransactionDefinition implements InitializingBean {
    ...
    
public Object execute(TransactionCallback action) throws TransactionException {
        
if (this.transactionManager instanceof CallbackPreferringPlatformTransactionManager) {
            
return ((CallbackPreferringPlatformTransactionManager) this.transactionManager).execute(this, action);
        }
        
else {
            TransactionStatus status 
= this.transactionManager.getTransaction(this);
            Object result 
= null;
            
try {
               
// 参数TransactionCallback 是一个接口,接口中定义了doInTransaction方法
                // 只要实现TransactionCallback接口,在doInTransaction()方法里编写具体要进行事务处理的代码即可。
                result = action.doInTransaction(status);
            }
            
catch (RuntimeException ex) {
                
// 回滚事务
                rollbackOnException(status, ex);
                
throw ex;
            }
            
catch (Error err) {
                
// 回滚事务
                rollbackOnException(status, err);
                
throw err;
            }
            
this.transactionManager.commit(status);
            
return result;
        }
    }

    ...
}

实现TransactionCallback接口。

 

transactionTemplate.execute(
    
new TransactionCallback() {
        
public Object doInTransaction(TransactionStatus ts) {
             ... //代码实现.
         }
     }

}

配置文件定义:

       <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            
<property name="dataSource">  
                
<ref bean="myDataSource" />  
            
</property> 
        
</bean>
        
        
<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">
            
<property name="transactionManager">  
                
<ref bean="transactionManager" />  
            
</property>
        
</bean>


如果给你带来帮助,欢迎微信或支付宝扫一扫,赞一下。