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

그런데 해당 기능을 사용하다가 수동으로 직접 스케줄러를 실행해야하는 경우가 발생할 수 있습니다.
오류가 발생해서 스케쥴러 실행이 안되었거나 스케줄러 실행결과가 잘못되어 다시 실행해야하는 경우 등등..
저는 스케쥴러를 뉴스 RSS 를 통해 이슈 키워드를 분석하는 서비스에 스케쥴러를 설정했는데
가끔 데이터가 잘못 나오는 경우가 있더군요. 아무래도 새벽 6시에 돌아가는데 간혹 RSS 로 내보내는 뉴스기사가 부실한 경우에 데이터가 맘에 안들게 나왔습니다.

주요 클래스
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>
스케쥴러를 설정하는 부분은 아래 블로그를 참고해주세요.
이렇게 하면 간단하게 자동실행 되도록 등록한 스케쥴러를 필요할 때 수동으로 직접 실행할 수 있습니다.
'JAVA' 카테고리의 다른 글
[JAVA] HTTP requst 정보 (클라이언트 IP, 헤더, URL 등) 총 정리 (0) | 2019.05.08 |
---|---|
[JAVA] Secure 코딩, 취약점 해결, 보안을 위한 방법 정리 (0) | 2019.05.08 |
[책요약] 자바 성능을 결정짓는 코딩습관과 튜닝이야기 - 이상민 저 (0) | 2019.04.25 |
[JAVA] String 문자열 자르기. 일정 글자수 만큼 잘라서 사용하는 방법 (substring 함수) (0) | 2019.04.10 |
[JAVA] 스프링(Spring) 에서 자동실행 스케쥴러 설정하기 (Spring Quartz + job scheduler + Cron Expression) (0) | 2019.04.10 |