작성
·
167
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
강의보다가 한 가지 더 궁금한 점이 있어 여쭤봅니다.
40:56초 쯤에 if 문에서 jobExecutionContext에서 이제 값을 조회할 수 있어서 if문이 걸리지 않는 것으로 알고 있는데요.
생각해보면 job을 실행할 때마다 jobExection이 새로 생성이 되고, jobExecutionContext는 jobExecution을 참조하는데 어떻게 해서 첫 번째에 시도했던 값을 파악하는 것인지 궁금합니다. 그렇게 되면 수행된 job이 많아질 수록 곁쳐지는 이름이 많아서 로직상 추후 원치 않은대로 수행될 가능성도 있을 것 같다는 생각인데 이 부분도 설명해 주실 수 있을까요?
0
아 강의를 2번정도 다시 돌려봤는데 그제서야 보이네요..
디버깅 하실 때 주소값이 다르네요!
그런데 어떻게 같은 타입인데 jobExecution은 공유가 가능하고, stepExecution은 공유가 불가능한지.. 궁금합니다!
제가 ExecutionContext 클래스를 봤을 땐 인터페이스인가 해서 봤더니 그냥 클래스더라구요
네
job 과 step 의 관계를 보면 job 이 step 를 포함하는 관계임을 알 수 있습니다.
그래서 job 안에 여러 step 를 구성할 수 있기 때문에 여러 step 은 상위 개념의 동일한 job 의 ExecutionContext 에 접근이 가능하므로 데이터를 공유할 수 있습니다.
step 은 각 자신만의 ExecutionContext 를 가지고 있기 때문에 step 간 데이터를 공유할 수 없습니다.
강의에서 설명하는 jobExecutionContext 와 stepExecutionContext 의 구조와 관계를 참고해 주시기 바랍니다.