事务的一些用法(持续修改...)

1、@Transactional注解:

  1. @Transactional注解只能感知RunTimeException,对于其它异常不能进行回滚
  2. @Transactional(rollbackfor = Exception.class)注解可以感知所有Exception异常,都能进行回滚
  3. @DSTransactional,多数据源事务注解,不需要参数

2、@Transactional注解方法内嵌套try-catch:

  1. 方法中进行try-catch捕获了异常并在catch中处理,不将异常抛出,@Transactional无法进行异常感知,无法进行回滚
  2. 方法中进行try-catch捕获了异常并将异常抛出,@Transactional可以感知异常并进行回滚
  3. 方法中进行try-catch捕获异常后,若想进行处理并回滚事务,可以在catch内使用编程式事务进行手动回滚,回滚后catch内的代码会继续执行
  4. 若在catch中进行了相关代码处理,并在处理结束后自定义一个异常抛出,@Transactional可以感知到异常并回滚,同时,catch中相关的处理操作也会被回滚

3、编程式事务的用法:

事务的前提是使用Spring框架,需要导入相关dependency依赖。编程式事务是为了使用更细粒度的事务对方法进行约束

以下是编程式事务的基本用法,详细用法还请参考文档或阅读源码!!!

  • PlatformTransactionManager

// 注入事务管理对象
@Autowired
private PlatformTransactionManager transactionManager;
// 获取事务接口,TransactionStatus继承了SavepointManager接口,SavepointManager是对事务中保存状态点功能的封装
TransactionStatus status = null;
// 手动开启事务,TransactionDefinition:事务定义,包括事务的隔离级别,事务的传播属性,超时时间设置等
status = transactionManager.getTransaction(new DefaultTransactionDefinition());
// 事务提交
transactionManager.commit(status);
// 事务回滚
if (判断条件) {
    transactionManager.rollback(status);
}
  • TransactionTemplate(核心方法为execute)

@Autowired
private TransactionTemplate transactionTemplate;
// 使用spring提供的事务模板对象的函数式接口,可传参数,具体参数见方法
transactionTemplate.execute(()->{
    // 操作内容1
    // 操作内容2
});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值