Quartz Scheduler

S:)·2024년 2월 14일
0

Scheduler

목록 보기
3/3

Quartz (Open Source Batch Scheduler)

Terracotta 라는 회사에 의해 개발된 Job Scheduling 라이브러리 입니다.
완전히 자바로 개발되어 어느 자바 프로그램에서도 쉽게 통합해서 개발할 수 있습니다.
Quartz는 수십에서 수천 개 의 작업도 실행 가능하여 간단한 interval 형식이나 Cron 표현식으로 복잡한 스케줄링도 지원합니다.

장/단점

[장점]

  • DB 기반으로 스케줄러 간의 Clustering기능을 제공한다

    • Clustering : 따로따로 작동하는 여러 컴퓨터를 놀리적으로 결합하여 전체를 한대의 컴퓨터처럼 이용할 수 있게 하는 시스템 구출 기술
  • In-memory Job Scheduler도 제공한다.

  • 여러 기본 Plug- in 제공
    -ShutdownHookPlugin : JVM 종료 이벤트를 캐치해서 스케줄러에게 종료를 알려준다.
    -LoggingJobHistroyPlugin : Job 실행에 대한 로그를 남겨 디버깅할 때 유용하게 사용 할 수 있다.

[단점]

  • Clustering 기능을 제공하지만 , 단순 랜덤 방식이라서 완벽한 Cluster 간의 로드 분산은 안된다.
  • 어드민 UI 제공하지 않는다.
  • 스케줄링 실행에 대한 History 보관하지 않는다.
  • Fixed Delay 타입을 보장하지 않으므로 추가 작업이 필요하다.

    fixedDelay : scheulder 가 끝나는 시간으로 1초 간격으로 실행

Quartz 주요 요소

  1. Scheduler : Quartz 실행 환경을 관리하는 핵심 개체
  2. Job : 사용자가 수행할 작업을 정의하는 인터페이스로서 Trigger 개체를 이용하여 스케줄할 수 있다.
  3. JobDetial : 작업명과 작업그룹과 같은 수행할 Job에 대한 상세 정보를 정의하는 개체이다
  4. Trigger : 정의한 Job 개체의 실행 스케줄을 정의하는 개체로서 Scheduler 개체에게 Job 수행시점을 알려주는 개체이다.

Quartz 용어

- Job

  • Quartz API 에서 단 하나의 메서드를 가진 execute(JobExecutionContext context)
    Job 인터페이스를 제공한다.
    Quartz를 사용하는 개발자는 수행해야 하는 실제 작업을 이 메서드에서 구현하면 된다.
  • Job의 Trigger가 발생하면 스케줄러는 JobExecutionContext 객체를 넘겨주고 execute 호출
  • JobExecutionContext는 Scheduler,Trigger,JobDetail 등을 포함하여 Job 인스턴스에 대한 정보를 제공하는 객체

- JobDataMap

  • JobDataMap 은 Job 인스턴스가 실행할 때 사용할 수 있게 원하는 정보를 담을 수 있는 객체
  • JobDetail 을 생성할 때 JobDataMap도 같이 세팅해주면 된다.

Trigger

  • Trigger는 Job을 실행시킬 스케줄링 조건(ex.시간,업무) 등을 담고 있고 Scheduler 는 이정보를 기반으로 Job을 수행시킨다.

[Trigger 와 Job 의 관계]

- 1 Trigger = 1 Job : 반드시 하나의 Trigger는 반드시 하나의 Job을 지정할 수 있다.
- N Trigger = 1 Job : 하나의 Job을 여러 시간때로 실행 시킬 수 있다.

[Simple Trigger]

- 특정 시간에 Job을 수행할 때 사용되며 반복 횟수와 실행 간격 등을 지정할 수 있다.

[CronTrigger]

- cron 표현식으로 Trigger를 정의하는 방식 
- cron 표현식은 SimpleTrigger 와 같이 단순 반복뿐만이 아니라 더 복잡한 스케줄링(ex. 매월 둘째주 화요일 오전 11시부터 오후 1시까지 몇분마다 실행) 도 지정할 수 

Quartz 사용하여 Scheduler

1. Quartz DSL

  • DSL (Domain Specific Language) : 빌더 클래스를 제공합니다.
    빌더 클래스를 사용하려면 관련 패키지들을 import 해야합니다.
    • import static org.quartz.JobBuilder.*;
    • import static org.quartz.SimpleScheduleBuilder.*;
    • import static org.quartz.CronScheduleBuilder.*;
    • import static org.quartz.CalendarIntervalScheduleBuilder.*;
    • import static org.quartz.TriggerBuilder.*;
    • import static org.quartz.DateBuilder.*;

2. Quartz 주요 Interface

  • Schduler : 스케줄러에 사용되는 메인 API
  • Job : 스케줄러에 의해 실행되는 실제 작업을 수행하는 개체
  • JobDetail : Job 인스턴스 만드는데 사용
  • Trigger : Job이 수행될 조건 정의(특정시간,횟수, 반복주기 등 )
  • JobBuilder : JobDetail을 만드는데 사용되는 빌더
    TriggerBuilder : Trigger을 만드는데 사요되는 빌더
  • Scheduler 는 SchedulerFactory에 의해 생성된 후 shutdown() 메소드에 의해서 없어질 때까지 실행된다.
  • Scheduler가 생성되면 Job과 Trigger를 추가하거나 삭제 또는 그 리스트를 가져 오거나 트리거를 일시 멈추는 것과 같은 일정과 관련된 조작을 할 수 있다.
  • Scheduler는 start()메소드에 의해서 시작되기 전까지 작업을 실행시키는 트리거는 작동되지 않는다.

3. Quartz 사용하기

public class SimpleExample {
  public static void main(String[] args) throws Exception {
	  SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
	  Scheduler sched = schedFact.getScheduler();	//Scheduler를 가져 옴
	  sched.start();								//Scheduler 시작

	  
	  JobDetail job = newJob(MyJob.class)			//MyJob.class지정한 Job
	      .withIdentity("JobName", "groupName")		//이름과 그룹이름 지정
	      .build();									Job 만듬

	  Trigger trigger = newTrigger()				//새로운 Trigger
	      .withIdentity("myTrigger", "group1")		//이름과 그룹이름 지정
	      .startNow()								//start함
	      .withSchedule(simpleSchedule()			//스케줄 지정 
	          .withIntervalInSeconds(10)			//10초마다
	          .repeatForever())						//계속 반복함
	      .build();									//트리거 만듬

	  sched.scheduleJob(job, trigger);	   			//Scheduler에 job을 trigger에 따라 실행하도록 추가 함  
	
  }
profile
일단 저장

0개의 댓글

관련 채용 정보