Spring Quartz 2 동적 작업 의 실례 상세 설명

Spring Quartz 2 동적 작업 의 실례 상세 설명
Quartz 에서 Simple ScheduleBuilder 류 를 사용 합 니 다.Cron ScheduleBuilder 가 아 닌 Cron ScheduleBuilder 는 Cron 표현 식 입 니 다.구체 적 으로 는 자체 바 이 두 를 바 랍 니 다.
구현 코드: 

/** 
   *      
   * @param scheduleJob 
   * @throws Exception 
   */ 
  @Override 
  @SuppressWarnings("unchecked") 
  public void addJobSimple(ScheduleJob scheduleJob) throws Exception{ 
    TriggerKey triggerKey = TriggerKey.triggerKey(scheduleJob.getJobName(), scheduleJob.getJobGroup()); 
    //     
    Trigger trigger = scheduler.getTrigger(triggerKey); 
    if (null == trigger) { 
      JobDetail jobDetail = JobBuilder.newJob((Class<? extends Job>) Class.forName(scheduleJob.getClazz())) 
       .withIdentity(scheduleJob.getJobName(), scheduleJob.getJobGroup()).build(); 
      jobDetail.getJobDataMap().put("scheduleJob", scheduleJob); 
       
      SimpleScheduleBuilder simpleScheduleBuilder = SimpleScheduleBuilder.simpleSchedule(); 
      if(" ".equals(scheduleJob.getTimeType()) ||  
          "second".equalsIgnoreCase(scheduleJob.getTimeType())){ 
        simpleScheduleBuilder.withIntervalInSeconds(scheduleJob.getTimeValue()).repeatForever(); 
      }else if(" ".equals(scheduleJob.getTimeType()) || "  ".equals(scheduleJob.getTimeType()) ||  
          "minute".equalsIgnoreCase(scheduleJob.getTimeType())){ 
        simpleScheduleBuilder.withIntervalInMinutes(scheduleJob.getTimeValue()).repeatForever(); 
      }else if(" ".equals(scheduleJob.getTimeType()) || "  ".equals(scheduleJob.getTimeType()) ||  
          "hour".equalsIgnoreCase(scheduleJob.getTimeType())){ 
        simpleScheduleBuilder.withIntervalInHours(scheduleJob.getTimeValue()).repeatForever(); 
      }else if(" ".equals(scheduleJob.getTimeType()) ||  
          "date".equalsIgnoreCase(scheduleJob.getTimeType())){ 
        simpleScheduleBuilder.withIntervalInHours(scheduleJob.getTimeValue()).repeatForever(); 
      } 
      ScheduleBuilder<SimpleTrigger> schedBuilder = simpleScheduleBuilder.withMisfireHandlingInstructionNextWithRemainingCount(); 
       
      trigger =TriggerBuilder.newTrigger().withIdentity(scheduleJob.getJobName(), scheduleJob.getJobGroup()) 
          .withSchedule(schedBuilder).build(); 
      trigger = TriggerBuilder.newTrigger().withIdentity(scheduleJob.getJobName(), scheduleJob.getJobGroup()).withSchedule(schedBuilder).build(); 
      scheduler.scheduleJob(jobDetail, trigger); 
      log.info(CC.LOG_PREFIX + "      :"+JasonUtils.Object2String(scheduleJob)); 
    }else { 
      this.updateJobCron(scheduleJob); 
    } 
  } 
주의해 야 할 것 은 시간 임 무 를 한 번 만 수행 할 때 코드 를 자세히 봐 야 합 니 다.예 를 들 어 위의 간단 한 시간 임 무 는 처음에 저 와 같 았 습 니 다.

simpleScheduleBuilder.withIntervalInSeconds(scheduleJob.getTimeValue()); 
결 과 는 한 번 만 실 행 됩 니 다.제 가 필요 한 것 은 계속 반복 해서 실행 하 는 것 입 니 다.마지막 으로 다음 과 같이 바 꾸 는 것 입 니 다.

simpleScheduleBuilder.withIntervalInSeconds(scheduleJob.getTimeValue()).repeatForever(); 
뒤에 하나 더 있 음 을 알 수 있다.repeat Forever()는 영원히 반복 된다 는 뜻 이다. 
몇 번 을 실행 하고 실행 하지 않 으 려 면:.withRepeatCount(triggerRepeatCount)를 사용 하 십시오.다음 과 같 습 니 다.

simpleScheduleBuilder.withIntervalInHours(scheduleJob.getTimeValue()).withRepeatCount(triggerRepeatCount); 
궁금 한 점 이 있 으 시 면 메 시 지 를 남기 거나 본 사이트 의 커 뮤 니 티 에 가서 토론 을 교류 하 세 요.읽 어 주 셔 서 감사합니다. 도움 이 되 셨 으 면 좋 겠 습 니 다.본 사이트 에 대한 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기