检查 Grails 的服务方法是否已经 运行 某个参数

Check if a Grails' service method is already running with certain parameter

我正在使用 grails 4.0.6,我需要检查给定服务的方法是否正在与某个域对象的实例一起执行。在这种情况下,该方法需要很长时间才能 运行 并使用参数(域 class' 实例)调用它。如果使用当前正在执行的同一实例再次调用它,则必须中止调用。我尝试在域 class 中设置一个标志(并刷新更新)但是它没有反映在新调用中。任何提示表示赞赏。

如果您需要中止第二个调用,请使用锁。如果您只是不想让它们 运行 同时发生,请使用同步块。

锁定:

class MyService {
    static def locks = [:]

    def someMethod(inputParam) {
        def key = "${inputParam.class}${inputParam.id}"
        def lock = locks.get(key)
        if (!lock) {
            lock = new ReentrantLock()
            locks.put(key, lock)
        }
        if (lock.tryLock()) {
            // do your work here
            lock.unlock()
        }
    }
}

已同步:

您的服务方式差不多是

synchronized (key) {
    // your work
}

任何这些都可能需要调整...我只是在此处键入它而没有进行任何测试!