Spring-使用事务面板

正常开发,我们一般会使用基于事务的注解来实现事务的机制,但是有的时候或者某种场景,完全通过注解是达不到效果的,比如 我们想完成以下的场景:

1 根据条件,手动回滚或者提交事务

2 获取事务是否已经彻底完成的状态

3 设置事务具体的回滚point等,一句话想更好灵活的去控制事务的使用,这个时候推荐自定义事务的实现,一般通过如下两种方式

3.1 基于TransactionTemplate

使用TransactionTemplate 不需要显式地开始事务,甚至不需要显式地提交事务。这些步骤都由模板完成。但出现异常时,应通过TransactionStatus 的setRollbackOnly 显式回滚事务。 
TransactionTemplate 的execute 方法接收一个TransactionCallback 实例。Callback 也是Spring 的经典设计,用于简化用户操作, TransactionCallback 包含如下方法。 
• Object dolnTransaction(TransactionStatus status) 。 

一般使用如下所示的代码结构
transactionTemplate.execute(new TransactionCallback() { 
public Object doInTransaction(TransactionStatus status) { 
try{	
    } 
catch (Exception e) { 
} 
  finally { 

status.setRollbackOnly(); 
           ) 
); 
这个方法是可以由返回只

如果有异常的话,一定要使用status.setRollbackOnly进行回滚

3.2 基于PlatformTransactionManager

使用PlatformTransactionManager直接管理事务。简单地通过一个bean引用给你的bean传递一个你使用的 PlatformTransaction对象。然后,使用TransactionDefinition和TransactionStatus对象就可以发起、回滚、提交事务。它会涉及到其它两个对象TransactionDefinition和TransactionStatus,一般使用如下片段

        //定义一个事务
        DefaultTransactionDefinition def= new DefaultTransactionDefinition();     
        //设置事务的传播级别
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);       
        //获取事务的状态
        TransactionStatus status = transactionManager.getTransaction(def);
        //提交事务;
        transactionManager.commit(status);
        //回滚事务
        transactionManager.rollback(status);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章