有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在Quartz调度器中使用@DisallowConcurrentExecution

如果这个问题太天真,我很抱歉, 我希望作业被安排成一个接一个地执行,而不是并行执行。它只执行一次

从文档中,@DisallowConcurrentExecution是

  • 将{@link Job}类标记为不能同时执行多个实例的注释(其中实例基于{@link JobDetail}定义,或者换句话说,基于{@link JobKey})

但当我用相同的工作密钥安排一份工作时,我会 Failed to schedule a job org.quartz.ObjectAlreadyExistsException

如果我生成一个不同的JobKey,它就不会注意到@DisallowConcurrentExecution,而且作业是并行执行的(如文档中所述)

请建议我如何做到这一点,任何指点都会很有帮助

PS:我不知道会安排哪些工作。所以,如果作业已经在运行,我需要一些方法来动态链接作业


共 (1) 个答案

  1. # 1 楼答案

    相同的JobKey=相同的工作
    不同的JobKey=不同的工作

    Quartz不允许您多次使用相同的JobKey,因为这将是两个具有相同密钥的作业。比如有两个相同ID的用户

    你需要做的是为相同的JobKey安排不同的JobTrigger

    @DisallowConcurrentExecution避免重复执行相同的作业。如果使用不同的JobKey,它就不再是同一个作业,因此注释没有任何效果。但是对于一个给定的JobKey和多个JobTrigger,如果前一个作业尚未完成,那么@DisallowConcurrentExecution将阻止触发器启动新的作业执行

    我建议看一看Quartz's documentation,以便更深入地理解上述概念