Spring的事务相对于数据库的事务有自己的特点,这种特性叫做事务传播机制。事务传播机制定义了事务在多个方法的调用中是如何传递的。如下几种:
事务传播行为类型 说明 PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是默认的事务传播行为 PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。 PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。(一个新的事务将启动,而且如果有一个现有的事务在运行的话,则这个方法将在运行期被挂起,直到新的事务提交或者回滚才恢复执行。) PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。 PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。(外层事务抛出异常回滚,那么内层事务必须回滚,反之内层事务并不影响外层事务) 目前想到的一个场景:假如一个账户扣款,并插入操作日志,不论扣款成功与否,都要记录日志。并且不能因为插入日志异常而导致账户扣款回滚。所以插入日志的事务传播行为可以定义为PROPAGATION_REQUIRES_NEW。
Spring中事务的传播行为
最新推荐文章于 2023-03-07 11:20:46 发布