2017-09-19 35 views
0

我正在處理JMS隊列。我的要求是在隊列中沒有消息時監視隊列大小併發送電子郵件。 Cronjob作業將監視隊列並在隊列中的第一條消息上觸發。以下是觸發這項工作的代碼。在隊列的第一消息Hybris cronjob - 如果未運行,則啓動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)); 

} 

控制檯輸出

工作開始。

工作狀態::假

由於工作觸發超過一次的結果。爲什麼cronjob沒有立即啓動並立即變爲運行狀態?是否有更好的方法來確定工作已觸發並確保不再觸發?

回答

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的最新信息。 不知道這是否是一個好方法,但總體而言。