最外层事务REQUIRED | ①第一个事务REQUIRED | 第一个事务异常了,如果执行完之后抛异常,并没有自己catch,则第二个事务没有执行,那么不管最外层事务有没有手动catch,都会回滚,①②等于没有执行。如果①异常了自己手动catch了那所有的事务都是正常执行 |
---|---|---|
②第二个事务REQUIRED | 如果②异常了,自己没有手动catch,同样不管最外层事务有没有手动catch,都会回滚,①②等于没有执行。如果②异常了自己手动catch了那所有的事务都是正常执行 | |
最外层事务REQUIRED | ①第一个事务REQUIRES_NEW | 事务①如果抛出异常了,并没有在最外层自己手动catch,直接自己回滚了,然后把异常抛出给最外层框架了,最外层把事务回滚了。如果在最外层自己手动catch,,最外层把事务提交但是事务②并没有执行 |
②第二个事务REQUIRES_NEW | 如果②异常了,自己回滚,最外层事务手动catch了,那么最外层事务会提交,如果最外层没有手动catch | |
最外层事务REQUIRED | ①第一个事务NESTED | 如果①事务抛异常了,事务有回滚点直接回滚为回滚点,如果最外层事务没有catch则外层事务会回滚,如果被外层事务catch了,则外层事务会提交。 |
②第二个事务NESTED | 如果②抛异常了,则②的事务会回滚,如果外层没有手动catch事务则也会被回滚,如果外层手动catch了则事务会提交 | |
最外层事务REQUIRED | ①第一个事务REQUIRED | 第①个事务异常了,如果执行完之后抛异常,则自己会设置回滚true(this.rollbackOnly = true),外层事务没有catch,外层事务会回滚。外层事务catch了,在commit中同样会选择rollback |
②第二个事务REQUIRED | ②抛异常了,则自己会设置回滚true(this.rollbackOnly = true),如果外层事务没有catch,则会回滚,如果外层catch了,同样会在在commit中同样会选择rollback | |
最外层事务REQUIRED | ①第一个事务REQUIRED,设置了noRollbackFor = ArithmeticException.class | 如果①抛ArithmeticException异常了,则第①事务回滚的时候会走commit但是不会真正的提交,如果没有在外层事务中手动catch异常,抛出的ArithmeticException会被spring的最外层事务catch然后回滚。如果在外层事务中手动catch异常,则会被spring的最外层事务直接提交,数据①有记录 |
②第二个事务REQUIRED,设置了noRollbackFor = ArithmeticException.class | 如果②抛ArithmeticException异常了,则第②事务回滚的时候会走commit但是不会真正的提交,如果没有在外层事务中手动catch异常,抛出的ArithmeticException会被spring的最外层事务catch然后回滚。如果在外层事务中手动catch异常,则会被spring的最外层事务直接提交,数据①②有记录 |
Spring tx事务演示结果
最新推荐文章于 2022-07-26 10:36:33 发布