【问题标题】:Lock a row in database and release it later锁定数据库中的一行并稍后释放它
【发布时间】:2020-12-13 06:33:15
【问题描述】:
我有以下用例 -
- 用户注册并在表格中填写详细信息。用户数据存储在数据库中的“用户”表下。
- 管理员登录到应用程序。验证用户数据并启用用户。
这里的要求是锁定用户数据以防止任何进一步的更新或删除操作,并且只允许读取操作。只有在用户详细信息得到管理员批准后,我们才会解除对用户数据的锁定。
我探索了弹簧靴悲观锁定。但是,它不适合上面的用例,因为我将允许在一个事务下锁定和释放。我们在 Spring Boot 下是否有任何功能可以锁定表的行,然后再释放它?
或者有没有办法使用spring boot来实现一个工作流程?
【问题讨论】:
标签:
spring-boot
spring-mvc
spring-data-jpa
spring-data
locking
【解决方案1】:
悲观锁和乐观锁用于防止同时运行事务的并发更新。
这根本不是你的情况。
- 您可以在单独的表中创建一个用户,并在批准后将其复制到主表中。
- 只需向用户添加一个标志列,如果标志为
false,则不允许更新。
【解决方案2】:
你应该看看社区项目Spring Content。
这个项目包含一个名为Spring Versions JPA 的模块,它允许您将锁定和版本控制语义添加到您描述的 JPA 实体中。这是内容管理应用程序中非常常见的用例(Spring Content 旨在提供服务)。你可以阅读更多关于它的信息here。
它被设计为一个独特的模块,可以与主要的 Spring Content 项目分开使用,但我不知道是否有人真的以这种方式使用过它,所以 YMMV。也就是说,如果您在我们的 github 项目上提出问题,我很乐意为您提供帮助以帮助您启动和运行。这可能比自己编写这个逻辑更容易。