Hybris cronjob - 如果没有启动 cronjob 运行

Hybris cronjob - start cronjob if not running

我正在研究 JMS 队列。我的要求是监控队列大小并在队列中没有消息时发送电子邮件。 Cronjob 作业将监视队列并在队列中的第一条消息上触发。下面是触发作业的代码。

CronJobModel CronJobModel = new CronJobModel();
CronJobModel.setCode("Job1");
CronJobModel = flexibleSearchService
        .getModelByExample(CronJobModel);

modelService.save(CronJobModel);

LOG.debug(" Check and start job");

if (!cronJobService.isRunning(CronJobModel)) {               
    LOG.info("Job initiated on first message in the Queue. ");
    cronJobService.performCronJob(CronJobModel);
    
        LOG.info("Job status::" + cronJobService.isRunning(CronJobModel));
    
}

控制台输出

Job initiated on first message in the Queue.

Job status::false

因此作业被触发了不止一次。为什么 cronjob 没有启动并立即更改为 运行 状态?有没有更好的方法来识别作业已触发并确保不会再次触发?

你可以尝试做一个

modelService.refresh(CronJobModel)

所以例如:

if (!cronJobService.isRunning(CronJobModel)) {               
    LOG.info("Job initiated on first message in the Queue. ");
    cronJobService.performCronJob(CronJobModel);
    modelService.refresh(CronJobModel);
    LOG.info("Job status::" + cronJobService.isRunning(CronJobModel));
}

这将从数据库中获取最新信息(以防其他线程将状态更改为 运行)。 不过不确定这是否是一个好的方法。