我正在研究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没有启动并立即更改为运行状态?是否有更好的方法来识别已触发的作业并确保不再触发?
答案 0 :(得分:1)
您可以尝试
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));
}
这将从db获取最新信息(例如,如果另一个线程将状态更改为RUNNING)。 不确定这是否是一个好的方法。