2017-09-19 24 views
0

私はJMSキューで作業しています。キューのサイズを監視し、キューにメッセージがなければ電子メールを送信するのが私の要件です。 Cronjobジョブはキューを監視し、キュー内の最初のメッセージでトリガーされます。以下は、ジョブをトリガーするコードです。キュー内の最初のメッセージで開始Hybris cronjob - 実行していない場合はcronジョブを開始します

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) 

ので、例えば行うために試みることができる:(例えば、別のスレッドがRUNNINGにステータスの変更を行った場合)。これは、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)); 
} 

。 これが全体的に良いアプローチであるかどうかは不明です。

関連する問題