浅谈Spring嵌套事务是怎么回滚的⽬录
源码解析
TransactionAspectSupport.invokeWithinTransaction()
内层事务
TransactionAspectSupportpleteTransactionAfterThrowing()
AbstractPlatformTransactionManager rollback()
DataSourceTransactionManager#doSetRollbackOnly
DataSourceTransactionObject#setRollbackOnly()
外层事务
TransactionAspectSupport#commitTransactionAfterReturning()
AbstractPlatformTransactionManager#commit
DataSourceTransactionObject#isRollbackOnly()
spring roll怎么读修正
更深⼊理解 Spring 事务。
⽤户注册完成后,需要给该⽤户登记⼀门PUA必修课,并更新该门课的登记⽤户数。
为此,我添加了两个表。
课程表 course,记录课程名称和注册的⽤户数。
⽤户选课表 user_course,记录⽤户表 user 和课程表 course 之间的多对多关联。
同时为课程表初始化了⼀条课程信息
接下来我们完成⽤户的相关操作,主要包括两部分:
新增⽤户选课记录
课程登记学⽣数 + 1
新增业务类 CourseService实现相关业务逻辑,分别调⽤了上述⽅法保存⽤户与课程的关联关系,并给课程注册⼈数+1
为避免注册课程的业务异常导致⽤户信息⽆法保存,这⾥ catch 注册课程⽅法中抛出的异常。希望当注册课程发⽣错误时,只回滚注册课程部分,保证⽤户信息依然正常。
为验证异常是否符合预期,在 regCourse() ⾥抛⼀个注册失败异常:
执⾏代码:
注册失败部分的异常符合预期,但是后⾯⼜多了⼀个这样的错误提⽰:Transaction rolled back because it has been marked as rollback-only
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论