如何防止在Grails中同时执行作业?

| 我在grails中有一个石英作业,需要每5s执行一次,但是我需要按顺序执行。在某些情况下,作业的执行超过了5s,在这种情况下,我不想在先前的执行未完成时执行。如何在grails中进行配置? (当然,整个魔术可以用一个静态的volatile标志来完成,但这不是一种非常优雅的方法) (另外,如何配置作业为单例?) 谢谢     
已邀请:
        假设您正在使用grails石英插件,则应该能够将作业类的
concurrent
属性设置为
false
。 从Quartz插件文档中:   \“默认情况下,作业以并发方式执行,因此即使同一作业的先前执行仍在运行,新的作业也可以开始执行。如果要覆盖此行为,则可以使用'concurrent \'属性,在这种情况下为Quartz \将使用StatefulJob \“ 在石英插件的最新版本(Grails 3.3。*的2.0.13版)中,看起来像这样:
class MyJob {

    static concurrent = false

    void execute() {
        println \"Job run!\"
    }
}
对于较旧版本的grails / quartz,它看起来类似,不同之处在于属性是用
def
而不是
static
设置的:
class MyJob {

    static concurrent = false

    void execute() {
        println \"Job run!\"
    }
}
    
        使您的工作类别实现StatefulJob而不是Job     
        对于基于Quartz的作业,并发使用
static concurrent = false
在工作班上。 请注意定义中的“ 4”,至少从2.0.12版本开始,需要使用它代替“ 8”。 参见Quartz文档。     
        在,我使用Spring任务在没有石英的情况下实现了它:
beans = { 
    xmlns task: \"http://www.springframework.org/schema/task\"

    task.\'scheduler\'(\'id\':\"myScheduler\", \'pool-size\':\"1\")

    task.\'scheduled-tasks\'(\'scheduler\':\"myScheduler\") {
        task.\'scheduled\'(ref:\"myBean\", method:\"myBeanMethodToExec\", \'fixed-delay\':5000)
    }
}
(我认为甚至没有必要使用pool-size 1,但是请确保100%;)     

要回复问题请先登录注册