在多个AP服务器中JobScheduler的同一个触发器重复触发。请告知原因和处理方法。

 
【发生条件】
在多个AP服务器中启动了JobScheduler服务

【原因】
这是在多个服务器中更新触发器状态时偶尔发生的现象。

触发器的状态变化按照WAITING -> ACQUIRED -> EXECUTING -> WAITING来跳转。

获取AP1中计划触发的状态为“WAITING”的触发器。
在AP1中的触发器更新(WAITING ->更新为ACQUIRED)事务结束之前,将获取AP2中状态为“WAITING”的触发器。
之后,AP1的事务完成。
在AP2中的状态更新为“ACQUIRED”之前,将执行AP1中触发器触发完成的“ACQUIRED -> EXECUTING -> WAITING”的状态更新。
此时,虽然在AP1中触发器已触发完成,但在AP2中将被判断为未触发的触发器,且也在AP2中触发。

【规避方法】
可以通过以下任意一个方法来规避。
在获取下个要触发的触发器时,可以通过将其设置为锁定来规避。


intra-mart Accel Platform 2016 Summer及之后版本的情况下,可以通过以下方法来设置。

可以通过将im-job-scheduler-config.xml的锁定获取设置更改为true来规避。
https://www.intra-mart.jp/document/library/iap/public/configuration/im_configuration_reference/texts/im_job_scheduler/im-job-scheduler-config/index.html#im-job-scheduler_acquire-triggers-within-lock

intra-mart Accel Platform 2016 Spring及之前版本的情况下,可以通过以下方法来设置。

可以通过在WEB-INF/classes下级中创建im_job_scheduler.properties文件,并指定以下来规避。
org.quartz.jobStore.acquireTriggersWithinLock=true


可以通过将JobScheduler服务设置为单个服务器来规避。

-- 适用对象 -----------------------------------------
iAP/Accel Platform/所有更新版本
---------------------------------------------------------

FAQID:598
这篇文章有帮助吗?
0 人中有 0 人觉得有帮助
由 Zendesk 提供技术支持