关于 Spring 事务传播行为非事务方式的理解
在 Spring 中,事务传播行为是决定事务如何传播的一个特性。当当前代码执行需要调用另一个方法时,如何处理这个方法的事务就取决于事务传播行为的设置。
Spring 中有 7 种事务传播行为,分别是:
- PROPAGATION_REQUIRED(默认)
表示在调用方法执行时,如果当前已经存在一个事务,那么这个方法将在这个事务中运行。如果当前没有事务,它会启动一个新的事务。
简单来说,就是如果当前方法本身没有开启事务,那么它会新建一个事务,并且这个新建的事务将成为当前方法及其调用的方法们所在的共享事务。
示例1:
假设我们有 ServiceA 和 ServiceB 两个服务,它们都在一个数据库事务中运行。当 ServiceA 调用 ServiceB 时,如果此时 ServiceB 中的代码需要开启一个事务,那么这个事务将合并到 ServiceA 所在的事务中,以保证整个过程中只有一个事务在运行。
- PROPAGATION_SUPPORTS
表示在调用方法执行时,如果当前已经存在一个事务,那么这个方法将在这个事务中运行。如果当前没有事务,它会基于非事务方式运行,而不是启动一个新的事务。
简单来说,就是如果当前方法所在的调用栈中存在事务,那么这个方法将以事务方式运行。如果当前方法所在的调用栈中不存在事务,那么这个方法就不会开启事务,而是以非事务方式运行。
示例2:
假设我们有一个轻量级的系统,它没有对数据库事务进行特别要求。假设我们又有一个 ServiceC,它需要在数据库中修改数据。而这个 ServiceC 本身并不需要运行在事务中。这时候,我们可以把 ServiceC 的传播行为设置为 PROPAGATION_SUPPORTS,以便它可以根据上下文的需求运行在事务中或者非事务中。
以上就是关于 Spring 事务传播行为非事务方式的理解的攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于spring事务传播行为非事务方式的理解 - Python技术站