Spring事务注解回滚测试似乎不太顺利
Posted
技术标签:
【中文标题】Spring事务注解回滚测试似乎不太顺利【英文标题】:Spring transactional annotation rollback test doesn't seem to go well 【发布时间】:2021-12-29 09:33:21 【问题描述】:这是控制器代码:
@GetMapping("/test/hello")
public String test()
Member m = memberService.transactionTest();
return "haha";
这是服务代码:
@Transactional(rollbackFor = NullPointerException.class)
public Member transactionTest()
Member m = Member.builder()
.username("rollback")
.age(32)
.team(teamRepository.findById(1L).get())
.coach(coachRepository.findById(1L).get())
.build();
memberRepository.save(m);
exception();
return m;
public void exception()
Member m = null;
m.getUsername();
据我所知,它何时完成应该回滚 因为 RuntimeException 发生但插入过程运行良好所以我想知道为什么。
【问题讨论】:
存储库也是事务性的吗?如果是这样,它是否具有默认传播?顺便说一句,默认行为是回滚任何 RuntimeException,因此无需明确提及rollbackFor
(我不确定这是否会添加到默认行为或覆盖它)。
你正在使用哪个数据库,通过anychange mysql?
M.Deinum 它连接到 MariaDB sur Thomas 我没有设置任何传播设置,我只在该方法上设置了 Transactional 选项 T.T
【参考方案1】:
因为Optional.get()
抛出NoSuchElementException
(而不是空指针)。
From javadoc:
public T get()
如果此
Optional
中存在值,则返回该值,否则抛出NoSuchElementException
....
通过rollbackFor = NullPointerException.class
,您将NoSuchElementException
排除在可回滚异常之外。
【讨论】:
以上是关于Spring事务注解回滚测试似乎不太顺利的主要内容,如果未能解决你的问题,请参考以下文章
Spring基础知识1--环境搭建bean创建依赖注入注解注入