java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Spring事务回滚

详解Spring事务回滚的两种方法

作者:阿杆

Spring事务回滚的前提是你当前使用的数据库必须支持事务,比如MySQL的Innodb是支持的,但Mysaim则是不支持事务的,本文就给大家介绍两种Spring事务回滚的方法,需要的朋友可以参考下

方法一

@Service
@Transactional
public class UserServiceImpl implements UserService {
    @Override
    public void save(User user) {
        //some code
        //db operation
    }
}
@Service
@Transactional(rollbackFor = Exception.class)
public class UserServiceImpl implements UserService {
    @Resource
	private UserMapper userMapper;
    @Override
    public void save(User user) {
        userMapper.insert(user);
        throw new RuntimeException(); // 抛出异常,事务回滚,上面的insert插入失败。
    }
}

方法二

通过注入 DataSourceTransactionManager 来手动开启事务,手动回滚事务,用于抛出异常被catch后,进行手动回滚,可控程度更高,可以更灵活的使用。

@Service
public class UserServiceImpl implements UserService {
   @Autowired
   private DataSourceTransactionManager transactionManager;
   @Override
   @Transactional
   public void save(User user) {
       DefaultTransactionDefinition def = new DefaultTransactionDefinition();
       // explicitly setting the transaction name is something that can only be done programmatically
       def.setName("SomeTxName");
       def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
       TransactionStatus status = transactionManager.getTransaction(def);
       try {
           // execute your business logic here
           //db operation
       } catch (Exception ex) {
           transactionManager.rollback(status);
           throw ex;
       }
   }
} // 此代码案例来自Alibaba Coding Guidelines

到此这篇关于详解Spring事务回滚的两种方法的文章就介绍到这了,更多相关Spring事务回滚内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文