spring事务传播机制案例
时间: 2023-12-17 19:02:50 浏览: 41
假设有一个银行系统,其中有两个服务:转账服务和存款服务。
现在有一个场景,用户A想要将100元转账给用户B,并且在转账的同时,还想要将50元存入自己的账户中。这时候就需要使用到事务传播机制。
我们可以将这个场景拆分成两个服务,分别是转账服务和存款服务。在转账服务中,需要将A的账户减去100元,B的账户加上100元;在存款服务中,需要将A的账户加上50元。
如果这两个服务都是独立的,那么就可能出现一种情况,即在转账服务中,A的账户减去100元成功,但是在存款服务中,A的账户加上50元失败了,导致A的账户既扣了100元,又未加上50元,这样就会出现数据不一致的情况。
因此,我们需要使用到事务传播机制来保证这两个服务中的操作要么全部成功,要么全部失败。
在这个场景中,我们可以将转账服务和存款服务都设置为REQUIRED类型的事务传播机制,这样就可以保证这两个服务中的操作都在同一个事务中。如果其中一个服务执行失败了,那么整个事务也会回滚,保证数据的一致性。
相关问题
spring事务传播级别案例
Spring事务传播级别是用来控制在多个事务方法相互调用时,事务如何传播的一种机制。下面是几个常见的Spring事务传播级别案例:
1. REQUIRED(默认):如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。这是最常用的传播级别,适用于大多数情况。
2. REQUIRES_NEW:无论当前是否存在事务,都创建一个新的事务。如果当前存在事务,则将其挂起。适用于需要独立事务的场景,例如某个方法需要独立提交或回滚。
3. SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务方式执行。适用于不需要强制要求事务的场景,可以根据上下文自由选择是否加入事务。
4. NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,则将其挂起。适用于不需要事务支持的场景,例如只读操作。
5. NEVER:以非事务方式执行操作,如果当前存在事务,则抛出异常。适用于绝对不允许在事务中执行的场景。
6. MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。适用于必须在事务中执行的场景。
spring 事务传播机制
Spring的事务传播机制用于定义在一个事务方法调用另一个事务方法时,如何处理事务的边界。事务传播机制可以通过设置`@Transactional`注解的`propagation`属性来指定。
常见的事务传播机制包括:
1. `REQUIRED`:如果当前存在事务,则加入到当前事务中执行;如果当前没有事务,则创建一个新的事务。
2. `REQUIRES_NEW`:无论当前是否存在事务,都创建一个新的事务,并挂起当前事务。
3. `SUPPORTS`:如果当前存在事务,则加入到当前事务中执行;如果当前没有事务,则以非事务的方式执行。
4. `NOT_SUPPORTED`:以非事务的方式执行操作,如果当前存在事务,则挂起当前事务。
5. `MANDATORY`:如果当前存在事务,则加入到当前事务中执行;如果当前没有事务,则抛出异常。
6. `NEVER`:以非事务的方式执行操作,如果当前存在事务,则抛出异常。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)