database - 与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"
}
数据库状态缺少这些值之一,即使更新为每个值都有一个值。尽管数据库是独立执行事务的,但数据在执行补丁之前会进行获取,并且当两个事务同时发生时会以错误状态结束。我正在尝试解决此问题并寻找解决方法
解决方案
我在这里看到几个选项:
- 使用乐观锁,失败时抛出异常;在客户端上,如果收到异常,请重试
- 尽可能使用数据库锁
- 同步发送请求
- 如果补丁端点总是齐头并进,则将它们合并为一个端点(如果您在其他地方使用这两个端点,则可以创建第三个端点来支持两者)
我不确定是否有一种 Hibernate 方法可以自动解决这个问题,它可能会帮助你解决锁问题。
推荐阅读
- c# - 在 XAML 中包装属性
- applescript - 使用带有 applescript 和 novation 启动板的 midipipe 控制 OBS
- javascript - 如何在 React Native 中绘制六边形图像
- reactjs - useEffect 和 ESlint 穷举-deps 规则
- python - Spark.sql:删除列名上的表名
- c# - 正则表达式匹配无法在两个字符之间找到文本
- r - 使两个输入相互依赖
- python - Discord.py 上 SQLite 3 的排序问题
- typescript - 使用纱线工作区从文件中解析而不是在 Lerna monorepo 中输入
- python - 多列合二为一