1、简介
当事务方法被另外一个事务调用时,必须指定事务应该如何传播,例如:方法可能在现有事务中继续运行,也可能开启一个新的事务,并在自己的事务中运行。
事务的传播行为由事务的传播属性确定,Spring定义了7总类传播行为。
REQUIRED
required:需要的
如果有事务在运行,当前方法就在这个事务内运行,否则,就启动一个新的事务,并在自己的事务内运行。
行为:假设我和老王两家人出去旅游,我比较懒,就看老王家有没有车,老王有车就坐老王的,他没车我就自己再找一辆车。
影响:如果我在老王的车上,老王翻车了,也会受影响。如果自己开的车,就不会被影响。
REQUIRES_NEW
required_new:需要新的
当前的方法必须启动新的事务,并在它自己的事务内运行。如果有事务正在运行,应该将它(别的事务)挂起。
行为:还是和老王出去旅游,我不管老王有没有车,我都自己开自己的车。
SUPPORTS
supports:支持
如果有事务运行,当前方法就在这个事务内运行,否则,它就可以不运行在事务中。
行为:有(事务)我就运行事务内,没有就拉倒。
NOT_SUPPORTED
not_supported:不支持
当前的方法不应该运行在事务中,如果有事务,则将这个事务挂起。
MANDATORY
mandatory:强制的,
当前的方法必须运行在事务内部,如果没有正在运行的事务,就抛出异常。
行为:必须有事务,没有就抛出异常。
NEVER
never:绝不
当前的方法不应该运行在事务中,如果有运行的事务,就抛出异常。
NESTED
nested:嵌套事务
如果有事务在运行,当前的方法就应该在这个事务的嵌套事务内运行;否则,就启动一个新的事务,并在它自己的事务内运行。
REQUIRED和REQUIRED_NEW比较常用,NESTED需要数据库支持,剩下几个一般很少用到。