작성
·
61
0
Q1) JobExecution과 JobExecutionContext는 job이 실행될때마다 생기는게 맞나요?
Q2) 맞다면 강의 예제와 같이 같은 job을 두 번 실행(첫번째 실패, 두번째 성공) 했을때 두번째 JobExecutionContext가 첫번째 JobExeuctionContext에 저장된 내용을 알수있다는게 이해가 되지 않습니다. 하지만 실제로 참고해서 동작하고 있고요. 그렇다면 같은 job이고 같은 jobParameter로 연속해서 실행하면 이전 잡을 복사해서 생성이 되나요? 아니면 다른 방법이 있나요?
답변 2
0
Q1) JobExecution과 JobExecutionContext는 job이 실행될때마다 생기는게 맞나요?
네, 맞습니다.
JobExecution 은 하나의 Job 실행(실행 시도)마다 고유하게 생성됩니다.
실패했든 성공했든, 실행하면 누르면 새로운 JobExecution 생성됩니다.
JobExecutionContext 은 해당 JobExecution 에 연결된 Context로, Step과 공유하거나 상태를 저장할 때 사용합니다.
ExecutionContext는 JobExecution 단위로 따로 존재하고, 필요 시 StepExecutionContext랑도 연결됩니다.
강의 참고 바랍니다
즉 요약하자면, Job을 한 번 실행하면 JobInstance는 기존 걸 재사용 (같은 Job + 같은 JobParameter일 때) 하는 것이며 JobExecution, JobExecutionContext는 매 실행마다 새로 생성됩니다
Q2) 맞다면 강의 예제와 같이 같은 job을 두 번 실행(첫번째 실패, 두번째 성공) 했을때 두번째 JobExecutionContext가 첫번째 JobExeuctionContext에 저장된 내용을 알수있다는게 이해가 되지 않습니다. 하지만 실제로 참고해서 동작하고 있고요. 그렇다면 같은 job이고 같은 jobParameter로 연속해서 실행하면 이전 잡을 복사해서 생성이 되나요? 아니면 다른 방법이 있나요?
ExecutionContext 저장 방식
Spring Batch는 JobRepository를 통해 실행 정보를 DB에 저장합니다
이 때 JobExecutionContext, StepExecutionContext 등도 BATCH_JOB_EXECUTION_CONTEXT, BATCH_STEP_EXECUTION_CONTEXT 테이블에 저장됩니다
여기서 같은 JobParameters 로 재실행 하면 같은 JobInstance가 사용되고 새로운 JobExecution이 만들어지고 이전에 실패했던 JobExecutionContext의 내용이 있다면 Spring Batch는 이를 불러와서 새 JobExecution에 자동 복사하게 됩니다
즉, ExecutionContext 는 실패한 Job의 상태 복구 및 재시도를 위해 재사용 가능하도록 설계되었습니다.
0
안녕하세요, 인프런 AI 인턴입니다. 김석호님! 스프링 배치에서의 JobExecution
과 JobExecutionContext
에 대한 질문을 주셨네요.
Q1) JobExecution
과 JobExecutionContext
는 job이 실행될 때마다 생기는 게 맞나요?
네, 맞습니다. JobExecution
은 특정 JobInstance
의 한 번의 실행을 나타내며, 매번 job이 실행될 때마다 새롭게 생성됩니다. 이와 함께 JobExecutionContext
도 매 실행마다 새로 만들어지며, 해당 실행의 컨텍스트나 상태 정보를 저장하는 데 사용됩니다.
Q2) 동일한 job과 동일한 jobParameter로 연속해서 실행할 경우, 두 번째 JobExecutionContext
가 첫 번째 JobExecutionContext
의 내용을 어떻게 참조할 수 있는가?
Spring Batch에서 동일한 JobInstance
와 JobParameter
로 재실행될 경우, JobExecutionContext
에 저장된 상태와 데이터는 이전 실행으로부터 복구됩니다. 이는 주로 실패한 job의 재시작을 지원하기 위한 것으로, 실패한 지점부터 작업을 다시 시작할 수 있도록 이전 컨텍스트의 데이터를 복원하는 기능을 포함하고 있습니다.
즉, 동일한 JobInstance
가 존재하는 상황에서 job이 실패했다면, 동일한 JobParameter
로 job이 재실행될 때 이전 JobExecutionContext
의 데이터를 활용하여 연속적인 실행을 지원하도록 설계되어 있습니다.
관련된 링크에서 더 자세한 내용을 참고하실 수 있습니다:
- 동일한 JobInstance에 대해서는 JobExecution이 복사가 되나요?
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.