【问题标题】:Patching resource at the same time with spring data rest与spring data rest同时修补资源
【发布时间】:2021-05-12 04:46:48
【问题描述】:

我有一个实体使用 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"
}

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

【问题讨论】:

    标签: database spring-data-jpa spring-data-rest


    【解决方案1】:

    我在这里看到了几个选项:

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

    我不确定是否有 Hibernate 方法可以自动解决此问题,它可能会帮助您解决锁问题。

    【讨论】:

    • 感谢我使用了带有@Version 的乐观锁机制来实现这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 2014-11-10
    • 2016-10-26
    • 2017-03-18
    • 2017-06-21
    相关资源
    最近更新 更多