인프런 커뮤니티 질문&답변

H N님의 프로필 이미지

작성한 질문수

스프링 배치

ExecutionContext

ExecutionContext 질문

24.06.23 15:59 작성

·

162

0

안녕하세요. 아래 코드에서 둘 다 ExecutionContext가 반환되는데, 둘은 같은 ExecutionContext가 아니라 다른 ExecutionContext인가요?

메서드 참조로 계속 타고 들어가서 하나는 getJobExecution()에서, 나머지 하나는 getStepExecution()에서 꺼내오는데 둘다 동일한 타입의 ExecutionContext라 헷갈립니다.

그리고 저렇게 각각 꺼내올 때 다른 ExecutionContext라 JobExecutionContext에 저장된 값을 Step에서 공유가 가능하고, stepExecutionContext에 저장된 값은 Step에서 공유가 불가능한 것이 맞는지 궁금합니다.

ExecutionContext jobExecutionContext = stepContribution.getStepExecution().getJobExecution().getExecutionContext();
ExecutionContext stepExecutionContext = stepContribution.getStepExecution().getExecutionContext();

답변 2

0

H N님의 프로필 이미지
H N
질문자

2024. 06. 24. 17:30

  1. 강의보다가 한 가지 더 궁금한 점이 있어 여쭤봅니다.

40:56초 쯤에 if 문에서 jobExecutionContext에서 이제 값을 조회할 수 있어서 if문이 걸리지 않는 것으로 알고 있는데요.

생각해보면 job을 실행할 때마다 jobExection이 새로 생성이 되고, jobExecutionContext는 jobExecution을 참조하는데 어떻게 해서 첫 번째에 시도했던 값을 파악하는 것인지 궁금합니다. 그렇게 되면 수행된 job이 많아질 수록 곁쳐지는 이름이 많아서 로직상 추후 원치 않은대로 수행될 가능성도 있을 것 같다는 생각인데 이 부분도 설명해 주실 수 있을까요?

0

H N님의 프로필 이미지
H N
질문자

2024. 06. 24. 16:45

아 강의를 2번정도 다시 돌려봤는데 그제서야 보이네요..

디버깅 하실 때 주소값이 다르네요!

그런데 어떻게 같은 타입인데 jobExecution은 공유가 가능하고, stepExecution은 공유가 불가능한지.. 궁금합니다!

제가 ExecutionContext 클래스를 봤을 땐 인터페이스인가 해서 봤더니 그냥 클래스더라구요

정수원님의 프로필 이미지
정수원
지식공유자

2024. 07. 01. 16:56

job 과 step 의 관계를 보면 job 이 step 를 포함하는 관계임을 알 수 있습니다.

그래서 job 안에 여러 step 를 구성할 수 있기 때문에 여러 step 은 상위 개념의 동일한 job 의 ExecutionContext 에 접근이 가능하므로 데이터를 공유할 수 있습니다.

step 은 각 자신만의 ExecutionContext 를 가지고 있기 때문에 step 간 데이터를 공유할 수 없습니다.

강의에서 설명하는 jobExecutionContext 와 stepExecutionContext 의 구조와 관계를 참고해 주시기 바랍니다.

H N님의 프로필 이미지

작성한 질문수

질문하기