sp:Propagation.REQUIRED vs Propagation.REQUIRES_NEW

本文探讨了Spring事务传播行为中Propagation.REQUIRED和Propagation.REQUIRES_NEW的差异。REQUIRED在现有事务中执行,如果无事务则新建;REQUIRES_NEW总是新建事务,即使在现有事务中调用。当内部事务回滚时,REQUIRED会使得整个事务回滚,而REQUIRES_NEW则不影响外部事务。UnexpectedRollbackException异常通常发生在外部事务尝试提交,但内部事务已被标记为回滚。
摘要由CSDN通过智能技术生成

Introduction

spring事务propagation(事务传播特性)配置,常用的配置项为Propagation.REQUIRED或者Propagation.REQUIRES_NEW。

Propagation.REQUIRED:如果当前有事务,则在当前事务中执行,如果没有事务,则创建一个事务执行。
Propagation.REQUIRES_NEW:无论如何创建一个新的事务执行。

这里的事务指的是数据库层面的事务(physical transaction)

如果在当前事务中,调用有@Transactional(Propagation.REQUIRED/REQUIRES_NEW)配置的方法,在该方法中触发了事务回滚条件,由于REQUIRED在当前事务中执行,所以当前事务会回滚,而REQUIRES_NEW新建一个事务,所以新建的事务会回滚,而当前事务是否回滚与此无关。

REQUIRED

@Service
public class TestServiceImpl02 implements TestService {
   
    @Autowired
    private SmsUserMapper smsUserMapper;
    @Autowired
    private TestService testServiceImpl01;

    @Override
    @Transactional(propagation=Propagation.REQUIRED)
    public void test() {
        SmsUser user = new SmsUser();
        user.setUserAccount("baizq000");
        user.setUserPwd("000000");
        user.setUserStatus(0);
        user.setPlatformName("xxx"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值