我有一个 grails 服务方法 load,我一次只希望一个用户能够运行。我曾尝试使用 Grails 悲观锁,但它有时才有效。在我的控制器中,我有:
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。