[Spring Batch+Quartz] 스프링 배치, 쿼츠 메타테이블 들여다보기
Spring Batch, Spring Quartz 메타테이블 들여다보기
Spring Batch, Spring Quartz 모두 InMemory 방식을 사용할 경우 Table 없이 사용가능하다.
하지만 Quartz Clustering 기능을 사용하는 경우 혹은 UI 로 배치(job) 및 스케쥴을 관리하는 경우 메타테이블 사용은 필수적이다.
Quartz , Batch 메타테이블 중 의미있는(내가 알고 있는..) 테이블 정보를 기록해둔다.
1. Quartz 메타테이블
1) FIRED_TRIGGERS; 현재 실행된(fired) 스케쥴의 트리거정보(비동기 동작시 바로 실행완료 상태가 되어버리므로 해당 테이블은 스쳐지나감)
2) PAUSED_TRIGGER_GRPS;
3) LOCKS;
4) SIMPLE_TRIGGERS;
5) SIMPROP_TRIGGERS;
6) CRON_TRIGGERS; 등록된 스케쥴의 cron 정보
7) BLOB_TRIGGERS;
8) TRIGGERS; 등록된 스케쥴의 trigger 정보
9) JOB_DETAILS; 실행될 QuartzJob 정보
10) CALENDARS; 특정 시간에 스케쥴을 동작시키지 않길 원할 경우 사용
11) SCHEDULER_STATE; 스케쥴러 정보, instance_name 칼럼값으로 스케쥴러 구분이 가능, last_checkin_time이 checkin_interval 값의 간격으로 계속해서 갱신된다. 서버(scheduler)가 죽은 경우 last_checkin_time+checkin_interval 값이 now 값 보다 작아지게 되므로 이를 활용하여 scheduler 가 죽었는지 판별할 수 있다. checkin_interval 은 quartz property 값에서 지정할 수 있다.
2. Batch 메타테이블
1) JOB_EXECUTION;
job 정보 (실행/종료 시작, 실행 상태 등) 관리.
Clustering모드일 경우 어떤 서버(스케쥴러)에서 배치가 실행되었는지 알 수 없다. 만약 이를 저장하고 싶다면 별도의 테이블을 두기보단 해당 테이블에 칼럼을 하나 추가하여 job 데이터가 insert 될 때 서버정보를 함께 넣어주어 관리 할 수 있다.
CRUD는 JdbcJobExecutionDao.class에 있으므로 해당 파일과, JobRepositoryFactoryBean 을 구현해주고 bean 설정을 조금 손봐주면 된다.
2) JOB_EXECUTION_CONTEXT;
3) JOB_EXECUTION_PARAMS; job parameter 정보 (jobLauncher 실행시 parameter 정보)
4) JOB_INSTANCE;
5) STEP_EXECUTION; job 의 step 정보
6) STEP_EXECUTION_CONTEXT;
7) STEP_EXECUTION_SEQ; 시퀀스 관리용 테이블
8) JOB_SEQ; 시퀀스 관리용 테이블
9) JOB_EXECUTION_SEQ; 시퀀스 관리용 테이블