코알못

5분 안에 구축하는 Quartz 동적 스케쥴링 본문

JAVA

5분 안에 구축하는 Quartz 동적 스케쥴링

코린이s 2021. 1. 30. 21:48
728x90

# Quartz 란?

- Job Scheduling 라이브러리

- 스프링에서 지원하고 있어 쉽게 구축 가능

- 전체 예제 코드

:: github.com/works-code/dynamic-schedule

 

works-code/dynamic-schedule

dynamic-schedule. Contribute to works-code/dynamic-schedule development by creating an account on GitHub.

github.com

# 개발 환경

- mac os catalina
- java 15
- spring boot 2.4.0
- gradle 6.6.1

 

# 프로젝트 구조

모듈명 설명
module-01 스케쥴을 동작하는 1번 모듈
- module-01 이라는 문구를 출력하는 스케쥴을 등록함
module-02 스케쥴을 동작하는 2번 모듈
- module-01 이라는 문구를 출력하는 스케쥴을 등록함
core-utils 공통된 소스가 있는 모듈
- 요청한 오류 코드에 맞는 문구를 가져와 출력
- 스케쥴을 등록하는 공통 소스
- 스케쥴을 처리하는 공통 소스
data-store 데이터(DB 조회, 수정, 삭제)와 관련된 부분

 

# API 설명

API 명 설명
/register 스케쥴을 등록하는 API
/delete 스케쥴을 삭제하는 API
/update 스케쥴을 업데이트 하는 API
/getRegisteredJobList 등록된 스케쥴을 조회하는 API

 

# 테이블 구조

CREATE TABLE `TBL_JOB_SCHEDULE` (
  `trigger_id` int NOT NULL AUTO_INCREMENT COMMENT 'uniq job id',
  `job_name` varchar(40) DEFAULT NULL COMMENT '배치 명',
  `trigger_cron` varchar(40) DEFAULT NULL COMMENT '배치 시간 (cron 형식)',
  `active_yn` char(1) DEFAULT 'N' COMMENT '배치 활성 여부',
  `app_nm` varchar(40) DEFAULT NULL COMMENT '배치가 적용 될 앱 명',
  PRIMARY KEY (`trigger_id`)
)

 

# 데이터

- 프로젝트 기동시 active_yn이 'Y' 로 되어 있는 스케쥴을 trigger_cron(스케쥴)에 맞게 자동 등록 ('N' 이면 배치를 등록하지 않는다.)

- app_nm 은 모듈 이름으로 모듈별로 스케쥴이 시작된다.

-> 예) module-01 번 시작시 trigger_id 가 1번인 스케쥴만 시작 된다.

- trigger_id 로 스케쥴을 구분한다.

 

# 테스트

1. module 01번 실행시 1초마다 'modle01' 을 출력함

2. 등록된 잡 조회

- 아래와 같이 등록된 스케쥴이 나옴

3. 스케쥴 시간 변경

- 변경 된 시점부터 2초 간격으로 프린트 되는 것을 확인

- 잘못된 형식으로 요청시 오류 메세지 리턴

4. 스케쥴 삭제

- 정상적으로 삭제 된 뒤 메세지가 출력되지 않음을 확인

- 등록된 스케쥴 조회 API 호출시 등록된 잡이 없는 것을 확인

5. 잡 등록

- 등록하고 나서 정상적으로 출력 됨을 확인

- 등록된 잡을 재등록 했을시 오류 메세지 리턴

 

728x90
Comments