在junit里用过Transactional 注解的小伙伴肯定是发现的.无论你出不出错.他都是回滚的.
可能这能满足大部分小伙伴的需求.但是对于我他.有点满足不了..因为我是拿测试用例来造数据的...
而且没有事务..每次要是新业务,,插入到一半出了个错..删除脏数据也得删半天.等等情况..
那么我就想.能不能让测试用例的Transactional也和业务一样呢..
瞄了一眼.spring怎么干的
spring测试用例跑之前会有一堆TestExecutionListener的实现会跑
其中处理事务相关的就是TransactionalTestExecutionListener
看了眼他的代码发现
他是用TransactionContext类把事务相关的包起来了.然后构造的时候传入isRollBack.简单粗暴的来决定是不是要回滚.
那其实问题就简单了.不用他这个事务管理器不就完事.自己写一个.
核心代码如下
NeedBusinessTransactional 这个注解是为了区别.到底是不是要用业务事务..毕竟..有的人就喜欢他默认实现..改默认实现我个人认为是不好的.
起码是要加个条件..
然后在注解类上加上
@TestExecutionListeners(value = ReplaceTransExecutionListener.class,mergeMode =
TestExecutionListeners.MergeMode.MERGE_WITH_DEFAULTS)
把自己的listener加到默认的listener之中就可以了.
只要这样就可以让事务注解的效果和业务中一样了.
网友评论