본문 바로가기

JAVA

[JAVA] 스프링(Spring) 에서 스케줄러 직접 실행하기 (Spring Quartz + job scheduler + JobKey + triggerJob)

저번에는 스프링에서 스케줄러를 설정하는 방법을 알아봤었습니다. 

 

2019/04/10 - [JAVA] - [JAVA] 스프링(Spring) 에서 자동실행 스케쥴러 설정하기 (Spring Quartz + job scheduler + Cron Expression)

 

 

그런데 해당 기능을 사용하다가 수동으로 직접 스케줄러를 실행해야하는 경우가 발생할 수 있습니다. 

오류가 발생해서 스케쥴러 실행이 안되었거나 스케줄러 실행결과가 잘못되어 다시 실행해야하는 경우 등등..

 

저는 스케쥴러를 뉴스 RSS 를 통해 이슈 키워드를 분석하는 서비스에 스케쥴러를 설정했는데 

가끔 데이터가 잘못 나오는 경우가 있더군요. 아무래도 새벽 6시에 돌아가는데 간혹 RSS 로 내보내는 뉴스기사가 부실한 경우에 데이터가 맘에 안들게 나왔습니다. 

 

키워드 인사이트에서 제공중인 이슈키워드와 뉴스Top5. 데이터가 이상하게 나옴

 

주요 클래스

 

1. org.springframework.scheduling.quartz.SchedulerFactoryBean

2. org.quartz.JobKey

3. org.quartz.Scheduler

 

 

스케쥴러 직접 실행할 Controller 메서드
/**
* 스케줄러 직접 실행	 
*/
@RequestMapping(value = "/schedulerTrigger.do")
public String schedulerTrigger(Model model, HttpServletRequest request) throws Exception {

  //권한 체크...
  if(!isAuthCheck(model, request)){
    return "forward:/main.do";
  }

  //잘못 저장된 데이터 삭제		
  service.deleteData();

  //스케쥴러 직접 실행
  JobKey jobKey = new JobKey("wordCloudJob");
  Scheduler scheduler = schedulerBean.getScheduler();
  scheduler.triggerJob(jobKey);

  return "forward:/main.do";
}

 

스케쥴러는 아무래도 관리자가 실행을 하는 경우가 많으니 반드시 권한 체크를 하는게 좋겠죠? 

그리고 혹시 자동으로 스케쥴러가 실행될 때 저장된 쓰레기 데이터가 있을 수 있으니 삭제 로직을 추가했습니다. 

그리고 스케쥴러를 직접 실행하도록 JobClass를 호출해주는거죠. 

 

new JobKey("wordCoudJob")의 wordCloudJob 은 스프링 Quartz 설정파일에서 JobClass로 정의한 Bean name 값입니다. 

<bean name="wordCloudJob" class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
  <property name="jobClass">
    <value>kwrd.cloud.util.CloudJobExecutor</value>
  </property>
</bean>

 

스케쥴러를 설정하는 부분은 아래 블로그를 참고해주세요. 

2019/04/10 - [JAVA] - [JAVA] 스프링(Spring) 에서 자동실행 스케쥴러 설정하기 (Spring Quartz + job scheduler + Cron Expression)

불러오는 중입니다...

이렇게 하면 간단하게 자동실행 되도록 등록한 스케쥴러를 필요할 때 수동으로 직접 실행할 수 있습니다.