나는 내 자신의 질문에 답할 것이다. 이를 수행하는 방법은 여러 가지가 있지만 속성과 개체를 먼저 StepExecutionContext
에 저장 한 다음 단계 완료 후 JobExecutionContext
으로 승격하는 것이 좋습니다. 당신의 작가에
ExecutionContext stepContext = this.stepExecution.getExecutionContext();
stepContext.put("someKey", someObject);
2 단계 : 당신의 단계의 빈 설정에 ExecutionContextPromotionListener
를 추가합니다. ExecutionContextPromotionListener
당신이 LinkedIn article에서이 구현과 유사한 당신의 단계를 넘어 작업 범위를 촉진하고자하는 키를 포함 키라는 String[]
특성이 포함되어야합니다
@Bean
public ExecutionContextPromotionListener promotionListener() {
ExecutionContextPromotionListener listener = new ExecutionContextPromotionListener();
listener.setKeys(new String[] { "entityRef" });
return listener;
}
단계 3 : 당신은 또한 추가 할 필요가 당신의 단계 전에 작가에 StepExecution가 실행됩니다 :
@BeforeStep
public void saveStepExecution(StepExecution stepExecution) {
this.stepExecution = stepExecution;
}
4 단계 : 이 당신의을 줄 것이다stepExecution
인스턴스에 대한 메소드 액세스. 여기에서 stepContext
에 액세스하여 데이터를 저장할 수 있습니다.예를 들어,이 예는 Spring Batch documentation에서 직접 오는 (
이 write() {
... // write logic
ExecutionContext stepContext = this.stepExecution.getExecutionContext();
stepContext.put("keyYouWantToPutIn", theCorrespondingDataObject);
}
마지막으로, 다음 단계에서,이 데이터를 검색 할 수 있습니다 작성할 수 있습니다
@BeforeStep
public void retrieveInterstepData(StepExecution stepExecution) {
JobExecution jobExecution = stepExecution.getJobExecution();
ExecutionContext jobContext = jobExecution.getExecutionContext();
this.someObject = jobContext.get("someKey");
}
이 시간을, 그러나 액세스하고있어 것을 알 수 jobContext
과 대조적으로 stepContext
- 승진 됨
감사합니다.하지만이 질문에 대한 답변을 완전히 모르겠습니다. itemWriter에 CSV와 데이터베이스에 동시에 쓸 수있는 논리가 포함되어 있다고 제안하고 있습니까? ? 그렇다면 어떻게 구현 되나요? 나는 좀 더 파고 들어보기 좋은 해결책을 찾았다. 내 자신의 대답을하고 나에게 네가 생각하는 바를 알려줘! –
ItemWriter의 구현은 비즈니스 로직의 세부 사항에 달려 있습니다. 물론 한 줄에 한 줄씩 처리하고 다음 줄에서 엔티티를 처리하여 파일 (또는 부르사)에 쓸 수 있습니다. –