gpt4 book ai didi

java - 悲观离线锁(Java,Spring)

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:18:05 25 4
gpt4 key购买 nike

我正在尝试使用 Spring 和 JPA/Hibernate 实现悲观离线锁。我的数据库中有一个锁表,用于存储所有锁(被锁定的记录的 ID、时间戳和用户)。 LockManager 服务接口(interface)如下所示:

public interface LockManager {

@Transactional(isolation=Isolation.SERIALIZABLE)
public Boolean TestAndGetLock(Application app, User user);

public void realeaseLock(Application app, User user);
}

TestAndGetLock 方法首先测试记录上是否存在现有锁。如果存在,则返回 true 并终止。如果没有,它返回 false 并创建锁(在锁表中写入一个新锁)。只有这样,webapp 才真正开始业务事务(在本例中,它显示了作为参数传递的应用程序的编辑表单)。

你能告诉我这个设计是否正确吗?

最佳答案

我会将设计更正为:

public boolean lock(Application app, User user);

public void unlock(Application app, User user);

所以这里的名字会更清楚。行为如下:客户端代码调用 lock() 并且如果它锁定了 smth,则返回 true,否则返回 false。它纠正了您的 api 中的一些误解:如果它成功锁定 smth,那么为什么它返回 false?另外,编写客户端代码会更简单:

if (lockManager.lock()) {
...
} else {
throw new LockNotObtainedException()
}

我觉得第二种方法可以。

关于java - 悲观离线锁(Java,Spring),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4225375/

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