今儿没事,想对代码中事务进行测试,因而乎就建立了一个单元测试进行测试,发如今方法中加上@Transactional注解后,发如今想数据库中插入数据时,代码执行成功,但数据库中却没有数据,因而各类检查,好比:数据库
一、让checked例外也回滚:在整个方法前加上 @Transactional(rollbackFor=Exception.class) 二、让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class) 三、不须要事务管理的(只查询的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED) 注意: 若是异常被try{...}catch{...}了,事务就不回滚了,若是想让事务回滚必须再往外抛try{...}catch{throw Exception}。
但是....,仍是不能解决问题。单元测试
冥冥之中,忽然和一位同事讨论时,看到了这样一段话:测试
为了使测试数据不对数据库形成污染,在使用Spring_JUnit进行的单元测试的时候,默认会对事务进行回滚,即@Rollback 默认是true,若是想要测试数据不回滚,可设置@Rollback(value = false) 。若是是使用MySQL数据库,在设置了自动回滚以后,若是发现事务依然没有回滚,那么能够查看一下数据库引擎是不是Innodb,由于其余的数据库引擎如MyISAM、Memory 都不支持事务。
spa
明白了,在单元测试中,事务是默认回滚了.........net
参考:https://blog.csdn.net/howard789/article/details/77801892code