Spring 事务

事务的特性

事务有ACID四个特点

1. A:代表原子性,比如说两个操作要么都成功要么都失败

2. C:代表一致性,比如说转账前后我都是200块,不管怎么操作都是200块。

3. I:代表隔离性,多个事务之前不能互相影响,做到隔离。

4. D:代表持久化,事务操作的结果,要永久保存到数据库中。

spring 创建事务的方式

编程式事务

在 spring 中为了支持编程式事务,专门提供了一个类:TransactionTemplate,在它的 execute 方法中,就实现了事务的功能

优势:粒度小

 @Autowired
   private TransactionTemplate transactionTemplate;
   ...
   public void save(final User user) {
         queryData1();
         queryData2();
         transactionTemplate.execute((status) => {
            addData1();
            updateData2();
            return Boolean.TRUE;
         })
   }

声明式事务

基于@Transactional注解实现

优势:无代码入侵

spring的传播属性

事务传播机制外部有事务外部无事务对事务的需求性
required加入外部事务开启
required_now挂起外部事务,自己开启事务开启
support加入外部事务不开启
not_support挂起外部事务不开启
never异常不开启
mandtory加入外部事务异常
nested嵌套事务开启

事务的失效情况

  1. 权限访问问题(使用非public 的权限)
  2. 使用final 修饰的方法
  3. 调用本类的方法(this)
  4. 该对象未被spring 管理
  5. 多线程调用
  6. 手动 try...catch 了异常
  7. 发生另类的异常(默认情况下只会回滚RuntimeException和Error)
  8. 数据库引擎不支持事务
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值