首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Spring Rest控制器是单例的吗?

Spring Rest控制器是单例的吗?
EN

Stack Overflow用户
提问于 2020-10-15 03:34:38
回答 1查看 53关注 0票数 2

我有一个样例Spring Rest应用程序。我有几个客户端在访问Spring Rest应用程序中的API。API根据我们使用的MSSQL DB检查作业是否已启动。如果数据库中的作业状态为已启动状态,它将挑选记录并将其状态更新为正在进行中,并将作业的详细信息作为对API的响应返回给API,客户端将基于此进行一些处理。

我们观察到,多个客户端正在选择处于已启动状态的同一个Job,并将其更新为正在进行中,并将响应传递给客户端。因此,最终结果就像多个客户端正在处理相同的作业。

为了解决这个问题,我们添加了一个synchronized块,并封装了DB调用,该调用挑选处于已启动状态的记录,并将其更新为正在进行中。DB调用驻留在服务层。但重复的问题仍然存在。

如果控制器和后续层(如服务层和DAO层)是单例的,那么当多个API调用命中web应用程序时,同步的代码块应该一次由一个请求执行。但这并不是我们实际看到的。

有没有人能帮我解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2020-10-15 05:16:08

实际上,Rest控制器是线程安全的,这意味着它能够唯一地处理每个HTTP请求。此外,当您尝试访问Rest控制器时,它会在浏览器中创建一个单独的会话id,您也可以使用开发人员控制台进行检查。在这里,您正在尝试访问相同的数据库并将状态更改为正在进行中,因此下一个api有机会获取前一个会话的详细信息。因此,尝试修改Rest API,而不是每次都修改数据库中的状态,或者您可以这样做:如果一个API访问数据库,则另一个API应该在第一个连接关闭之前不能访问数据库。希望这能为你工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64364485

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文