如何终止正在运行的Cron Job?

2020-08-19 08:20发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家,

这里我有一个问题:-

让我们假设3个Cron作业的运行时间超过一天,但是我想中止所有这3个Cron作业,如果该作业在上午8点之前尚未完成。 所以我写了一个Cron作业,该作业可以获取所有处于运行状态的cron作业并中止它们。

我完成了,

while(cronjobsname.hasNext()){

 最终CronJobModel runningjobname = cronJobService
                  .getCronJob(cronjobsname.next());
          如果(cronJobService.isRunning(runningjobname)){
          LOG.info(runningjobname);
          如果(LOG.isDebugEnabled()){
              LOG.debug("强制作业:"
                      + runningjobname.getCode()
                      +"由于未在上午8点或之前完成而中止");
          }

          cronJobService.requestAbortCronJob(runningjobname);
          }
      }

  

此代码运行正常,但Cron Jobs没有异常终止。

我错过了什么吗?

谢谢。

我希望您能迅速做出答复。

关于安库尔

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家,

这里我有一个问题:-

让我们假设3个Cron作业的运行时间超过一天,但是我想中止所有这3个Cron作业,如果该作业在上午8点之前尚未完成。 所以我写了一个Cron作业,该作业可以获取所有处于运行状态的cron作业并中止它们。

我完成了,

while(cronjobsname.hasNext()){

 最终CronJobModel runningjobname = cronJobService
                  .getCronJob(cronjobsname.next());
          如果(cronJobService.isRunning(runningjobname)){
          LOG.info(runningjobname);
          如果(LOG.isDebugEnabled()){
              LOG.debug("强制作业:"
                      + runningjobname.getCode()
                      +"由于未在上午8点或之前完成而中止");
          }

          cronJobService.requestAbortCronJob(runningjobname);
          }
      }

  

此代码运行正常,但Cron Jobs没有异常终止。

我错过了什么吗?

谢谢。

我希望您能迅速做出答复。

关于安库尔

付费偷看设置
发送
8条回答
四川大学会员
1楼-- · 2020-08-19 08:58

也许此代码段可以为您提供帮助。

示例

工作

 公共类CoreExampleImportJob扩展AbstractJobPerformable  {
     
      私有布尔型可终止;
     
      @Override
      public PerformResult perform(final CronJobModel cronJobModel){
         
          尝试{
              ...
              processItems(cronJobModel,list);
              ...
          } catch(final HttpException | RuntimeException e){
              LOG.fatal("发生异常:" + e.getMessage(),e);
             
              返回新的PerformResult(CronJobResult.FAILURE,CronJobStatus.FINISHED);
          }
         
          返回新的PerformResult(CronJobResult.SUCCESS,CronJobStatus.FINISHED);
      }
     
      private void processItems(最终CronJobModel cronJobModel,最终列表列表){
          emptyIfNull(list.getItems())。stream()。forEach(item-> {
              如果(clearAbortRequestedIfNeeded(cronJobModel)){
                  抛出新的RuntimeException(" CronJob被用户中止");
              }
             
              ....
          });
         
      }
     
      @Override
      公共布尔isAbortable(){
          返回可终止
      }
     
      @需要
      公共无效setAbortable(最终布尔型可终止){
          this.abortable =可终止;
      }
  }
  

春天

  
      
  
  

de.hybris.platform.servicelayer.cronjob.AbstractJobPerformable-> clearAbortRequestedIfNeeded

  ...
  受保护的最终布尔值clearAbortRequestedIfNeeded(T myCronJob){
          this.modelService.refresh(myCronJob);
          if(BooleanUtils.isTrue(myCronJob.getRequestAbort())){
              myCronJob.setRequestAbort((Boolean)null);
              this.modelService.save(myCronJob);
              返回true;
          }其他{
              返回false;
          }
      }
  
打一壶酱油
2楼-- · 2020-08-19 09:12

嗨,

我实施了可中止的工作。

我插入这个

 @Override
      公共布尔isAbortable(){
          返回可终止
      }

 

然后将其插入foreach中

如果(clearAbortRequestedIfNeeded(arg0))
 {
 LOG.warn("作业被用户中止。");


 返回新的PerformResult(CronJobResult.ERROR,CronJobStatus.ABORTED);
 }
 

我开始工作时,在clearAbortRequestedIfNeeded上有nullPointer

 java.lang.NullPointerException
 在de.hybris.platform.servicelayer.cronjob.AbstractJobPerformable.clearAbortRequestedIfNeeded(AbstractJobPerformable.java:72)


 

还有其他活动吗?

Stefania

一周热门 更多>