spring - Spring 事务管理 - 对同一 URL 的多个请求
问题描述
我正在尝试使用@Transactional
有关银行资金转账的注释在 Spring Boot 中创建一个 API。
现在我想知道 - 如果同时对同一个 API 进行多次调用,如何管理它们之间的事务。例如,假设transferBalance
方法由 Transaction 调用,X
该方法将资金从账户转移A
到B
,另一个交易 TransactionY
将资金转移B
到C
。两笔交易同时发生。这些交易将如何处理?它应该有什么样的传播,以及隔离又如何?
解决方案
检查以下更改:对于您的情况,请检查下面的粗体描述。 如果多个事务也可以使用 SERIALIZED
隔离级别定义了一个事务对某些数据存储库所做的更改如何影响其他并发并发事务,以及更改的数据如何以及何时可用于其他事务。当我们使用 Spring 框架定义事务时,我们还可以配置在哪个隔离级别执行相同的事务。
@Transactional(isolation=Isolation.READ_COMMITTED)
public void someTransactionalMethod(Object obj) {
}
READ_UNCOMMITTED 隔离级别表明一个事务可能会读取其他事务仍未提交的数据。
READ_COMMITTED 隔离级别表明一个事务不能读取其他事务尚未提交的数据。
REPEATABLE_READ 隔离级别规定,如果一个事务从数据库中多次读取一条记录,那么所有这些读取操作的结果必须始终相同。
SERIALIZABLE 隔离级别是所有隔离级别中限制性最强的。事务在所有级别(读取、范围和写入锁定)上都使用锁定执行,因此它们看起来好像是以序列化方式执行的。
推荐阅读
- php - 类别中计数帖子的php循环错误
- javascript - 在使用 React 缩放多个组件的同时提高性能
- sql-server - 在 SQL 中查询列标题数据
- laravel - 尝试在 laravel 中建立关系时出错
- python - 在 pygame 上验证 Pong 碰撞逻辑
- c# - 如何使用参数从 Lua / MoonSharp 脚本调用和等待异步 C# 方法?
- tokenize - 有没有办法获取在 BERT 中生成某个令牌的子字符串的位置?
- c++ - free():在 tcache 2 中检测到双重空闲
- javascript - 在两个文件中使用两个 MVC 模型
- angular - EventEmitter 没有在 Angular 9 中发射对象