事务传播特性Isolation
事务的传播特性指的是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行?
Spring的事务传播行为一共有7种

- REQUIRED:如果有事务在运行,当前的方法就在这个事务内运行,否则,就启动一个新的事务,并在自己的事务内运行(和外面的事务融为一体,如果报错则回退)
- REQUIED_NEW:当前的方法必须启动新事物,并在他自己的事务内运行,如果有事务正在运行,应该将它挂起。(每次创建一个新的事务进行运行,其他事务进行等待,同级事务报错不会进行回滚。)
- SUPPORTS:如果有事务在运行,当前的方法就在这个事务内运行,否则它可以不运行在事务中。
- NOT_SUPPORTED:当前的方法不应该运行在事务中,如果有运行的事务,将它挂起。
- MANDATORY:当前的方法必须运行在事务内部,如果没有在运行的事务,就跑
- NEVER:当前的方法不应该运行在事务中,如果有运行的事务,就抛出异常
- NESTED:如果有事务在运行,当前的方法就应该在这个事务的嵌套事务内运行,否则,就启动一个新的事务,并在它自己的事务内运行。
常用常考的主要是 REQUIRES REQUIRED_NEW NESTED 这三个。
- REQUIRED 是事务默认传播行为,主要是在两个事务之间进行调用的时候。将两个事务合并成为一个事务,如果在两个事务任意一处出现了异常的话那么就会统一回滚。
- REQUIRED_NEW 依照字面意思,在两个事务之间进行调用的时候, REQUIRED_NEW传播特性的方法会单独出一个事务进行处理。如果在该方法同级事务和代码中出现了异常,自己本身没有出现异常的话,本身不会进行回滚。
- NESTED它的话是跟required差不多,但是又有些区别,它可能表述的意思是并不是放到事务的同级,而是放到事务的里面。
自我总结仅供参考。
网友评论