gpt4 book ai didi

java - 在多用户环境中使 grails 服务方法原子化

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:51:34 26 4
gpt4 key购买 nike

我有一个 grails 服务方法 load,我一次只希望一个用户能够运行它。我试过使用 Grails 悲观锁,但它只是有时有效。在我的 Controller 中,我有:

try {
def country = Country.lock(id)
myService.load(country)
} catch (CannotAcquireLockException ex) {
flash.message = "Another user is modifying ${Country.get(id)}"
}

使 myService 的加载方法成为原子的最佳方法是什么?

如果我希望两个方法是原子的(当一个正在执行时,两个都不能执行)怎么办?

我的服务方法:

def load(id) {
def country = Country.get(id)
country.states.each {
...
it.save(flush: true)
}
}

将 synchronized 关键字添加到此方法会导致保存时出现 StaleObjectStateException。

最佳答案

默认情况下,Grails 服务是单例的,它可以解决您的部分问题。您还应该使您的服务方法同步以实现您想要的:

def synchronized load(country) { ... }

关于java - 在多用户环境中使 grails 服务方法原子化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14047404/

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