Spring REST-来自不同API的数据库并发请求



我有两个前端使用JSON Web令牌从两个不同的后端消费JSON。这些后端作用于同一数据库。

例如,在数据库中,我有Driver、Customer和Trip表。只有其中一方事先没有取消行程,客户或司机才能取消行程。某些交易记录在取消期间。

在这种情况下,当客户和司机同时发出取消行程的请求时,如何防止双重执行?

Am usin‘Spring Boot(RESTful(和Spring JPA。

任何帮助都将不胜感激。

编辑:假设这些后端是A&B、 客户请求从后端A取消,驱动程序请求从B取消。

使用乐观锁定。您的代码如下所示:

@Entity
public class Trip {
@Version
@NotNull
private Long version;
...
}

它的工作原理如下。每次更改都会修改版本。假设两个用户(或两个服务(加载了相同版本的trip。现在他们都试图取消它,也就是说,他们都试图修改它。除了更改,他们都发送版本。JPA检查update语句中的版本是否与数据库中的版本相同。因此,第一个请求获胜并将被执行。在执行过程中,版本将递增。

现在第二个请求到达并且还想要取消trip。JPA将看到更新语句中的版本属性比数据库中的版本值早(小于(。因此,第二个请求将不会执行,并且将抛出OptimisticLockException

您可以捕获此异常,并通知用户数据同时发生了更改,并建议用户重新加载数据。用户重新加载数据,并看到trip已经被取消。