我遇到错误 java.sql.SQLIntegrityConstraintViolationException:ORA-00001:违反了唯一约束(QRTZ_FIRED_TRIGGER_PK)
我不确定为什么会失败,因为这两个(SCHED_NAME,ENTRY_ID)pkey中,所有作业的Sched_name始终相同,而ENTRY_ID由Quartz本身生成。
任何人都可以帮助我找到此ENTRY_ID的创建方式以及在哪种情况下会导致PK失败的情况。
在我的应用程序中,以相同的时间间隔安排了多个Quartz JOBS。
答案 0 :(得分:0)
ENTRY_ID由节点的instanceId
和附加的计数器确定。 (例如“ mynode1557833519480”)
当群集中有两个具有相同instanceId的节点时,就会发生这种冲突。
确保instanceIds是唯一的。从Quartz文档:
org.quartz.scheduler.instanceId
可以是任何字符串,但对于所有工作的调度程序来说必须是唯一的,就像它们在集群中是相同的“逻辑”调度程序一样。如果您希望为您生成ID,则可以将值“ AUTO”用作instanceId。
(该计数器已使用当前时间初始化,因此,如果在某个时间点将系统时钟调回,则也可能发生这种情况)