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));
}
这将从数据库中获取最新信息(以防其他线程将状态更改为 运行)。
不过不确定这是否是一个好的方法。
我正在研究 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));
}
这将从数据库中获取最新信息(以防其他线程将状态更改为 运行)。 不过不确定这是否是一个好的方法。