Hybris cronjob-如果未运行,则启动cronjob

Hybris cronjob-如果未运行,则启动cronjob,cron,hybris,Cron,Hybris,我正在处理JMS队列。我的要求是监视队列大小,并在队列中没有消息时发送电子邮件。Cronjob作业将监视队列并在队列中的第一条消息时触发。下面是触发作业的代码 CronJobModel CronJobModel = new CronJobModel(); CronJobModel.setCode("Job1"); CronJobModel = flexibleSearchService .getModelByExample(CronJobModel); mo

我正在处理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));
    
}
控制台输出

作业在队列中的第一条消息上启动

作业状态::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));
}
这将从数据库中获取最新信息(例如,另一个线程的状态更改为RUNNING)。 但总体而言,不确定这是否是一个好方法