我有两个前端使用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
已经被取消。