Fed*_*ina 5 java database postgresql concurrency
我被要求实施一个"访问策略"来限制与数据库直接连接的应用程序(不是Web应用程序)中的证书过程的并发执行量.
应用程序在多台计算机上运行,如果多于用户尝试调用该进程,则在给定时间只允许执行一次,另一次必须返回错误消息(不等待第一次执行结束).
虽然我使用的是Java/Postgres,但这是一个普遍的问题.
鉴于我在多台机器上运行相同的应用程序,我能想到的最简单的解决方案是实现某种"数据库标志".
检查流程当前是否处于活动状态:
SELECT Active FROM Process
Run Code Online (Sandbox Code Playgroud)
如果它处于活动状态,则返回"并发访问策略错误".如果没有,请激活它:
UPDATE Process SET Active = 'Y'
Run Code Online (Sandbox Code Playgroud)
执行完成后,只需更新活动标志:
UPDATE Process SET Active = 'N'
Run Code Online (Sandbox Code Playgroud)
但是,我遇到了一个重大问题:
有任何想法吗?
不必费心使用活动标志,只需根据用户 ID 锁定行即可。将该行锁定在专用事务/连接中。当其他用户尝试锁定该行(使用 SELECT ... FOR UPDATE)时,您将收到错误,并且可以报告该错误。
如果持有事务的进程失败,则释放锁。如果退出,锁就会被释放。如果数据库重新启动,锁就会被释放。
赢得一切。
| 归档时间: |
|
| 查看次数: |
263 次 |
| 最近记录: |