오픈소스

Revise the documentation to correct misleading information regarding the ItemWriteListener

오렌지색 귤 2023. 11. 18. 22:46
반응형

Issue

 

 

 

Documentation on ItemWriteListener is misleading. · Issue #4400 · spring-projects/spring-batch

The reference doc for ItemWriteListener says: The afterWrite method is called after the item has been successfully written However, digging into the Javadoc for ItemWriteListener, it seems otherwis...

github.com

 

 

 

PR

 

 

 

Revise the documentation to correct misleading information regarding the ItemWriteListener by hwan33 · Pull Request #4491 · sp

The change satisfies the request made in #4400. As issue recommended, beforeWrite, write process, afterWrite is executed in same transaction.

github.com

 

 

 

Changes

 

수정된 문서

 

 

 

 

Merge

 

 

머지 완료되었습니다.

 

 

분석

 

Issuer가 두 가지 상반된 문서 내용에 대한 해결 방안을 이미 제안했음에도 불구하고, PR을 제출하는 입장에서는 코드 레벨에서 더 명확한 확인이 필요하다고 생각했습니다. 구체적으로, ItemWriteListenerafterWrite 메서드가 트랜잭션 커밋 전에 실행되는지, 아니면 커밋 후에 실행되는지에 대한 검증이 중요하다고 판단되었습니다.

 

 

ChunkOrientedTasklet 클래스 내에서 process 메서드가 호출됩니다. chunkProcessor로는 간단한 구현체인 SimpleChunkProcessor 클래스의 코드를 살펴보도록 하겠습니다.

 

write 호출
doWrite 호출

 

beforeWrite, writeItems, doAfterWrite 세가지 메서드가 순차적으로 호출됨을 알 수 있습니다. doAfterWrite 내부의 메서드를 살펴보면 아래와 같이 listenerafterWrite 메서드를 호출합니다.

 

 

 

 

그렇다면 트랜잭션 단위는 뭐야?

 

스프링 배치에서 트랜잭션의 기본 단위는 '청크'입니다. 이는 정해진 양의 데이터를 읽고 처리한 후 쓰기까지의 전체 과정이 하나의 트랜잭션으로 관리된다는 것을 의미합니다.

 

이와 관련해 이번 PR 작업을 위한 리서치 과정에서 흥미로운 추가 정보를 발견했습니다. 바로 ChunkListenerafterChunk 메소드는 ItemWriteListenerafterWrite와 다르게 트랜잭션이 실제로 커밋된 후에 실행된다는 사실입니다.

 

 

 

 

 

느낀점

 

스프링 배치 프로젝트의 규모가 크고 아직 배울 것이 많아, 간단한 문서 기여조차도 많은 시간과 노력이 필요했습니다. 그러나 이 과정을 통해 얻은 지식과 경험은 그 노력보다 훨씬 가치가 있는 것 같습니다.

 

앞으로도 더 열심히 기여하며 성장하겠습니다!

반응형