// 修复僵尸任务
  private void fixedDeadJob(JobPo jobPo) {
    try {
      jobPo.setIsRunning(false);
      // 1. add to executable queue
      try {
        //                application.getExecutableJobQueue().add(jobPo);
        TaskExecutableBean taskExecutable = JobDomainConverter.convertjobPotoTaskExecutable(jobPo);
        InjectorHolder.getInstance(DTaskProvider.class).addExecutableTask(taskExecutable);
      } catch (DuplicateJobException e) {
        // ignore
      }
      // 2. remove from executing queue
      //            application.getExecutingJobQueue().remove(jobPo.getJobId());
      InjectorHolder.getInstance(DTaskProvider.class)
          .deleteExecutingTaskByJobID(Long.parseLong(jobPo.getJobId()));

      //            JobLogPo jobLogPo = JobDomainConverter.convertJobLog(jobPo);
      //            jobLogPo.setSuccess(true);
      //            jobLogPo.setLevel(Level.WARN);
      //            jobLogPo.setLogType(LogType.FIXED_DEAD);
      //            application.getJobLogger().log(jobLogPo);

      TaskLogBean entity = JobDomainConverter.convertJobToTaskLog(jobPo);
      entity.setSuccess(true);
      entity.setLogType("FIXED_DEAD");
      entity.setCreateDate(new Date());
      entity.setLevel("WARN");
      // 打下日志
      InjectorHolder.getInstance(DTaskProvider.class).addTaskLog(entity);
    } catch (Throwable t) {
      LOGGER.error(t.getMessage(), t);
    }
    LOGGER.info("fix dead job ! {}", JSONUtils.toJSONString(jobPo));
  }
 @Test
 public void fetchTop() throws FailStoreException {
   List<KVPair<String, Job>> kvPairs = failStore.fetchTop(5, Job.class);
   if (CollectionUtils.isNotEmpty(kvPairs)) {
     for (KVPair<String, Job> kvPair : kvPairs) {
       System.out.println(JSONUtils.toJSONString(kvPair));
     }
   }
 }