传播级别是事务除了数据隔离级别外应一个重要的特性,是事务的传播级别和。传播级别定义的是事务的控制范围,不同的传播级别以不同的方式在逻辑或物理事务中封装业务方法。
Propagation类行 | 描述 |
---|---|
REQUIRED | 如果当前没有事务,就新建一个事务,如果当前bean方法执行上下文中已有打开的事务,则将使用相同的事务。 |
REQUIRES_NEW | 意味着容器将始终创建新的事务,每次都会新建一个事务,并且同时将上下文中的事务挂起,执行当前新建事务完成以后,上下文事务恢复再执行 |
NESTED | 嵌套是子事务套在父事务中执行,子事务是父事务的一部分,在进入子事务之前,父事务建立一个回滚点,叫save point, |
MANDATORY | 从字面上理解就是强制性,该级别的事务要求上下文中必须要存在事务,否则就会抛出异常!配置该方式的传播级别是有效的控制上下文调用代码遗漏添加事务控制的保证手段。比如一段代码不能单独被调用执行,但是一旦被调用,就必须有事务包含的情况,就可以使用这个传播级别。 |
NEVER | 该事务更严格,上面一个事务传播级别只是不支持而已,有事务就挂起,而PROPAGATION_NEVER传播级别要求上下文中不能存在事务,一旦有事务,就抛出runtime异常,强制停止执行!这个级别上辈子跟事务有仇。 |
NOT_SUPPORTED | 这个也可以从字面得知,not supported ,不支持,当前级别的特点就是上下文中存在事务,则挂起事务,执行当前逻辑,结束后恢复上下文的事务。 |
SUPPORTS | supports,支持,该传播级别的特点是,如果上下文存在事务,则支持事务加入事务,如果没有事务,则使用非事务的方式执行。所以说,并非所有的包在transactionTemplate.execute中的代码都会有事务支持。这个通常是用来处理那些并非原子性的非核心业务逻辑操作。应用场景较少。 |