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");
smsUserMapper.insert(user);
testServic

本文探讨了Spring事务传播行为中Propagation.REQUIRED和Propagation.REQUIRES_NEW的差异。REQUIRED在现有事务中执行,如果无事务则新建;REQUIRES_NEW总是新建事务,即使在现有事务中调用。当内部事务回滚时,REQUIRED会使得整个事务回滚,而REQUIRES_NEW则不影响外部事务。UnexpectedRollbackException异常通常发生在外部事务尝试提交,但内部事务已被标记为回滚。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



