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; 시퀀스 관리용 테이블