事物

 

1、只要被catch了的异常,不管有没有rollbackfor,当前事务都不会回滚,注意是当前事务,针对事务传播需要区分好是不是当前事务。

2、两个required,其中内部抛出运行时异常被外部try住会回滚,因为两个是一个事务,内部报错,相当于整个报错

3、无特殊情况,运行时异常才会回滚

 

 

 

 

以下测试userService是父方法,userService2是子方法

PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。,以下情况userService2不受userService中1/0的影响,数据库有LIlei和Tom,如果userService2没有事务,则数据库一条数据也不会有

2、PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。1中如果userService2改为REQUIRED则数据库没有数据,因为支持了userService的事物,与userService'融为一体'了。 但是如果把userService中的事物去掉,那么就会三条数据都会有,因为userService2有事务但并未报错,userService虽然报错但没有事务。

 

3、PROPAGATION_NESTED。他与PROPAGATION_REQUIRES_NEW差不多,区别在于PROPAGATION_REQUIRES_NEW与父事务不相关,而Nested的事务和他的父事务是相依的,他的提交是要等和他的父事务一块提交的。也就是说,如果父事务最后回滚,他也要回滚的。下面的例子数据库不会有数据,因为父方法报错,全部回滚。如果userService2不加事务的话,也不会有数据,因为只是方法调用,还是处在同一个事务下面

 

 4、PROPAGATION_NESTED的好处。可以捕捉异常。如下,userService2中报错,userService可以在分之中继续执行,数据库有Hanmeimei和dilireba

 5、子方法对父方法的影响其实没什么,无非就是调用的时候报错了有影响,事务方面没什么比如下面。数据库会有Hanmeimei和diilreba

 

 

posted @ 2017-08-09 10:48  贪吃的柳柳  阅读(160)  评论(0编辑  收藏  举报