首页 > 解决方案 > Spring 事务管理 - 对同一 URL 的多个请求

问题描述

我正在尝试使用@Transactional有关银行资金转账的注释在 Spring Boot 中创建一个 API。

现在我想知道 - 如果同时对同一个 API 进行多次调用,如何管理它们之间的事务。例如,假设transferBalance方法由 Transaction 调用,X该方法将资金从账户转移AB,另一个交易 TransactionY将资金转移BC。两笔交易同时发生。这些交易将如何处理?它应该有什么样的传播,以及隔离又如何?

标签: springspring-bootjpaspring-transactions

解决方案


检查以下更改:对于您的情况,请检查下面的粗体描述。 如果多个事务也可以使用 SERIALIZED

隔离级别定义了一个事务对某些数据存储库所做的更改如何影响其他并发并发事务,以及更改的数据如何以及何时可用于其他事务。当我们使用 Spring 框架定义事务时,我们还可以配置在哪个隔离级别执行相同的事务。

@Transactional(isolation=Isolation.READ_COMMITTED)
public void someTransactionalMethod(Object obj) {

}

READ_UNCOMMITTED 隔离级别表明一个事务可能会读取其他事务仍未提交的数据。

READ_COMMITTED 隔离级别表明一个事务不能读取其他事务尚未提交的数据。

REPEATABLE_READ 隔离级别规定,如果一个事务从数据库中多次读取一条记录,那么所有这些读取操作的结果必须始终相同。

SERIALIZABLE 隔离级别是所有隔离级别中限制性最强的。事务在所有级别(读取、范围和写入锁定)上都使用锁定执行,因此它们看起来好像是以序列化方式执行的。


推荐阅读