gpt4 book ai didi

java - 使用 Spring MVC 并发更新和检索

转载 作者:行者123 更新时间:2023-12-01 10:01:06 25 4
gpt4 key购买 nike

我正在使用 Spring MVC+REST 构建一个 Web 应用程序。我有一些更新用户状态的 HTTP 请求,还有一些检索用户状态的 HTTP 请求。

@RequestMapping(value = "/{id}", method = RequestMethod.POST)
@ResponseBody
public HttpEntity answer(@PathVariable(value = "id") Long id, @RequestParam("correct") Boolean result, Principal principal) throws JsonProcessingException, InterruptedException{
Competence comp = competenceservice.findById(id);
User user = userService.findByUsername(principal.getName());
interactionService.registerInteraction(comp, result, user);
return new ResponseEntity<>(HttpStatus.OK);
}

@RequestMapping(value = "/dailygoal/", method = RequestMethod.GET, produces = "application/json; charset=utf-8")
public HttpEntity<DailyGoal> getDailyGoal(Principal principal) {
Long goal = userservice.getDailyGoal(principal.getName());
Long achieved = userservice.getGoalAchieved(principal.getName());
return new ResponseEntity<>(new DailyGoal(goal, achieved), HttpStatus.OK);
}

我试图让它们尽可能独立,但我遇到了一个问题:在某些情况下,当我请求更新用户状态,然后检索他的更新状态(使用另一个请求) ,但是,由于并发问题(我认为),有时我会得到未更新的状态。我一直在考虑两种可能的解决方案:

  • 1 - 在前端强制序列化:第二个请求必须等待第一个请求的响应。我不喜欢这个解决方案,因为它由于后端限制而强制前端执行规则。
  • 2 - 在后端强制序列化:用户的更新状态是对更新请求的响应;我不喜欢该解决方案,因为它不尊重请求的独立性。

其中一个选项是否有一些我没有考虑过的重要内容?有人知道(更好的)第三种选择吗?

最佳答案

你的第一个方法是完美的。这是因为您始终希望用户在更新数据时查看更新的数据。

如果我正在更新一个字段,我想查看结果或错误,以防出现一些一致性问题,请考虑这一点,以便我可以采取纠正措施。我只能在更新返回并返回 200 OK、4XX 或 5XX 后才能执行此操作。因此,您应该始终等待更新响应,并根据响应仅决定下一步做什么。

关于java - 使用 Spring MVC 并发更新和检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36801366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com