Collective Intelligence

Quartz Trigger를 이용한 간단한 스케줄링 본문

개발/JAVA

Quartz Trigger를 이용한 간단한 스케줄링

유경파 2016. 6. 21. 17:56

심심해서(?) 라기 보다는 중국 IDC에 작동중인 서버가 아무이유없이 죽는 경우가 발생해서 아주 간단하게


웹서비스 상태를 체크해서 문제 발생시 담당자에게 이메일을 보내는 프로그램을 만든 적이 있다.


역시 quartz라는 훌륭한 라이브러리가 있어서 cron trigger를 쓰면 된다.


maven에 dependency를 추가하면 준비는 일단 끝나고


<dependency>
     <groupId>org.quartz-scheduler</groupId>
     <artifactId>quartz</artifactId>
     <version>2.2.1</version>
 </dependency>
 



원래는 Job을 만들어서 Trigger를 생성하는데 난 원래 이렇게 했었다.


 JobDetail job = JobBuilder.newJob(TestUrl.class).withIdentity("job01").build();
    
  CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("crontrigger","group01").withSchedule(CronScheduleBuilder.cronSchedule("5 * * * * ?")).build();



아주 간단하게 5분마다 job을 실행시키는 건데 중요한건 실행 주기를 설정하는 5 * * * * ? 이 부분에 대한 식을 따로 공부해야 하는 것이다.


가독성도 떨어지고 그냥 보기만해도 뭔가 싫어지는 느낌이다. 자주 쓰지도 않을 것이고, 특별한 기술이 아닌 것에 대한 시간을 쓰고싶지 않아


검색 신공을 발휘했더니 역시나 간단한 방법이 있었다.


위에서 CronTrigger 대신 그냥 Trigger를 쓰니깐 아주 쉽게 스케줄 설정을 할 수 있다.


Trigger trigger = TriggerBuilder.newTrigger().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInMinutes(5).repeatForever()).build(); 


말그대로 Simple 한 스케줄 빌더이다.


IDE에서 Code Assistance의 가이드를 받으면 다양하게 스케줄을 설정할 수 있고, 반복 빈도도 따로 설정할 수 있다.


누가봐도 알 수 있고, 실수할 가능성도 줄어든다. 대규모 프로그램이야 이것저것 다 따졌겠지만


간단한 모니터링 프로그램에서 사용할 것이라 그 간편함 때문에 바로 사용하게 되었다.


SchedulerFactory 선언이나 다른것은 동일하다.


 public void run() throws Exception {
  SchedulerFactory sf = new StdSchedulerFactory();
  Scheduler sched = sf.getScheduler();
  
  JobDetail job = JobBuilder.newJob(TestUrl.class).withIdentity("job01").build();
  Trigger trigger = TriggerBuilder.newTrigger().withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInMinutes   (5).repeatForever()).build();
   
  sched.start();
  sched.scheduleJob(job, trigger);
 }