用自己的话总结@Transactional中的REQUIRED方法和REQUIRES_NEW的区别
①事务的传播行为:当事务方法被另一个事务方法调用时,必须指定事务应该如何传播。
②REQUIRED(系统默认):如果有事务在运行,当前的方法就在这个事务内运行,否则,就启动一个新的事务,并在自己的事务内运行
REQUIRES_NEW:当前的方法必须启动新的事务,并在它自己的事务内运行,如果有事务正在运行,应该将它挂起
③区别:
REQUIRED:purchase为两个声明了事务的方法,并且传播行为是系统的默认行为。同时checkout也是一个声明了事务的方法,在该方法中调用purchase的两个方法。当checkout执行到第一个方法的时候,第一个方法继续使用checkout的事务进行执行,第二个方法也是使用checkout的事务进行执行,所以整个方法就只要一个事务。
REQUIRES_NEW:purchase为两个声明了事务的方法,传播行为均是REQUIRES_NEW。checkout方法的事务执行到第一个方法的时候,挂起,然后子方法的事务进行,第二个方法也是一样。
④如果一个事务发生了错误,那么回滚。在REQUIRED属性中,如果第二个方法发生错误,第一个方法也会回滚。而REQUIRES_NEW属性中,第二个方法发生错误,因为第一个是单独的事务,所以不会受到影响。