Quartz tutorial

Quartz - Trigger, Job, JobDetail
SchedulerFactoryBean : Trigger 생성
SimpleTriggerBean : 언제 어떻게 job을 실행할지 정의(CronTriggerBean 도 제공)
MethodInvokingJobDetailFactoryBean : scheduler에 맞춰서 객체의 메소드 호출

Instantiation : SchedulerFactory schedFact = new SchedulerFactory();
Scheduler sched = schedFact.getScheduler();
sched.start();

JobDetail jobDetail = new JobDetail("myJob", "myGroup", DumbJob.class);

스케줄러가 한번 셧다운되면, 다시 instantiation하지 않고 재시작할 수 없다. 트리거는 스케줄러가 시작할때까지 fire하지 않는다. pause 상태에 있는 동안에(Job이 실행되지 않는다.)

Trigger trigger = TriggerUtils.makeHourlyTrigger(); // fire every hour
trigger.setStartTime(TriggerUtils.getEveryHourDate(new Date())); //start on the next every hour
trigger.setName("myTrigger");

sched.scheduleJob(jobDetail, trigger); // 앞에서 트리거를 설정한대로 job의실행을 스케줄한다

트리거가 fire하면 스케줄러에 의해 Job 인터페이스의 execute메서드가 호출된다.
이 메서드에 던져진 JobExecutionContext 객체는 런타임 환경 정보를 가진 job 인스턴스를 제공한다.

JobDetail 객체는 Quartz 클라이언트(당신의 프로그램)에 의해 스케줄러에 job이 더해지는 시간에 생성된다. JobDataMap(당신의 job클래스의 인스턴스를 위해 상태 정보를 저장할 수 있는...) 과 같은 Job에 대한 다양한 프로퍼티 세팅을 포함한다.

Trigger 객체는 job들의 실행을 트리거하기 위해 사용된다. job을 스케줄하려고 할때, 당신은 트리거를 초기화하고, 그것의 프로퍼티들을 당신이 원하는 스케줄링을 제공하도록 튜닝한다. 트리거는 또한 그것과 관련된 JobDataMap도 가지고 있다 - 이것은 트리거를 fire하는데 특정화된 Job에게 파라미터를 던지는데 유용하다. Quartz 는 다양한 트리거 타입을 지원하지만, 대표적으로 SimpleTrigger와 CronTrigger를 사용한다.

SimpleTrigger는 원샷 실행을 원할 때 (단지 주어진 시간에 job이 한번만 실행될때) 편하다. 주어진 시간에 job을 fire할 필요가 있을 때, 실행간 T시간만큼 딜레이를 두고 그것을 N번 반복할 때 좋다.
CronTrigger는 달력같은 스케줄을 기반으로 하는 트리거링에 좋다( 매달 10일 정오 같이..)

Job과 Trigger를 분리한 이유 :
- 스케줄과 스케줄상에서 일어나는 일 을 분리함
- Job은 Job스케줄러 안에서 트리거와 독립적으로 생성되고 저장될 수 있고, 트리거들은 같은 job에 연관될 수 있다. 이런 느슨한 결합으로 연관된 트리거가 만료된 뒤에도 스케줄러에 남아있는 job을 구성할 수 있다. 그래서 그 후에 그것을 재정의하지 않고 다시 스케줄할 수 있다. 그것과 관련된 job을 재정의하지 않고 트리거를 수정하거나 재배치 할 수 있다.

Job과 트리거는 나중의 유지보수를 위해 당신의 job과 트리거들을 카테고리안에 조직화하는데 유용한 groups에 위치할 수 있다.
만약에 Job이나 트리거의 group을 'null'로 남겨두면, Scheduler.DEFAULT_GROUP 이 설정된 것과 동일하다.


덧글

댓글 입력 영역