개요
- 운영시, 배포나 서버작업 등을 위해 Batch Application을 종료해야 하는 경우 존재합니다
- 배치가 수행중에 종료할 경우 예상치 못한 결과를 일으킬 수 있고, 디버깅하기도 매우 까다롭습니다
<aside>
💡 새 배치 수행은 막고, 현재 수행중인 배치가 종료될때까지 기다리는 Graceful Shutdown이 필요합니다
</aside>
기존 명령어 분석
pkill 명령어 분석
- pkill -f [프로세스명]
- 별도 옵션 없는 경우, 시그널은 15(SIGTERM) 전송
- kill -9
Quartz Graceful Shutdown
Job Interrupt를 통한 Job Scheduler Gracefull Stop 구현하기
- SmartLifeCycle 인터페이스 내에 stop() 메서드 존재
- 해당 메서드를 구현한 gracefulShutdownHook 구현
- 구현시, 현재 실행중인 모든 job에 interrupt 메서드 호출
- InterrupableJob 인터페이스 내에 interrupt() 메서드 존재
- 기존 Job들을 모두 InterrupableJob의 구현체로 만들어서 interrupt 구현
Batch Graceful Shutdown
SIGTERM 핸들러 작성
[spring batch] Shutting Down Spring Batch Jobs Gracefully