2017-09-19 5 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) 

그래서 예컨대 할을 시도 할 수 있습니다 : (예를 들어, 다른 스레드가 실행하는 상태 변경 한 경우)이이 DB에서 최신 정보를 가져옵니다

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)); 
} 

. 전체적으로 좋은 접근 방법인지는 확실하지 않습니다.