首页 > 解决方案 > 与spring data rest同时修补资源

问题描述

我有一个使用 spring data rest api 进行补丁的实体

Customer {
   Long id;
   String primaryValue;
   String secondaryValue;
}

在微服务架构中,其他服务调用spring data rest api补丁调用来更新两个不同请求中的primaryValue和secondaryValue,这些请求可以同时发生。

Request1: 
api/url PATCH
{
"id":1,
"primaryValue": "value1"
}

Request2: 
api/url PATCH
{
"id":1,
"secondaryValue": "value2"
}

数据库状态缺少这些值之一,即使更新为每个值都有一个值。尽管数据库是独立执行事务的,但数据在执行补丁之前会进行获取,并且当两个事务同时发生时会以错误状态结束。我正在尝试解决此问题并寻找解决方法

标签: databasespring-data-jpaspring-data-rest

解决方案


我在这里看到几个选项:

  1. 使用乐观锁,失败时抛出异常;在客户端上,如果收到异常,请重试
  2. 尽可能使用数据库锁
  3. 同步发送请求
  4. 如果补丁端点总是齐头并进,则将它们合并为一个端点(如果您在其他地方使用这两个端点,则可以创建第三个端点来支持两者)

我不确定是否有一种 Hibernate 方法可以自动解决这个问题,它可能会帮助你解决锁问题。


推荐阅读