주어진 상황 :
사실, 많은 데이터도 아니다. 하지만 더 많다고 가정하고, 이런 데이터를 넣어야 하는 상황이다.
1. 매핑할 데이터가 필요하다!
2. 이를 직접 생성자를 불러서 넣는것보단, field mapping을 하자
: 생성자를 안쓰고 이렇게 설정해준 이유는?
이제, config를 설정하자
3. data를 읽어오는 reader!
amountdto를 일겅오며, 그 이름을 지정했다. setmapper는 위에서 설정한대로, 각 라인의 분할은 linetokenizer로 분할하였다.
4. 중간 과정 processor!
사실은 이보다 복잡한 process가 생길 수 있다. (전처리 등등)
5. writer!
이 부분이, 간단한 예시이다.
지금은 outputfile에 저장하는 정도로 마무리 되었지만, 실제로는 이 writer과정에서 db에 저장한다.
6. job,step!
write,read,process는 모두 step에, 해당 step들은 job에 들어가게 된다 .
6. 결과 !
지금은 txt로 저장했다. 하지만 실무에서는 아마 db에 저장될 것으로 예측한다.
질문 : 이게 지금 멀티 쓰레드가 작동된게 아니잖아!
맞다. 이제부터 멀티 쓰레드를 작동시켜 보겠다 .
그 구현을 , TaskExecutor를 통해 한다 .
taskexecutor의 예시 .
이후 step에 추가하게 되면
데이터가 뒤죽박죽 write 된다.
왜일까? -> 쓰레드는 프로세스에서 작동하는 일꾼과 같은 개념으로 생각한다.
멀티 thread로 작동하면, 쓰레드가 동작하는 순서대로 write되기 때문에 순서가 변경된다 .
(기존엔 1개의 쓰레드로 모든 작업을 진행, 순서대로 write될 수 밖에 없었다)
하지만 multithread가 항시 향상을 불러오진 않는다. (데이터의 lock 혹은 제약 때문에)
쓰레드들의 동작을, 로그로 표현해 보았다.
'백엔드 > Spring Batch' 카테고리의 다른 글
Spring Batch Exception (0) | 2024.01.15 |
---|---|
Spring Batch Test (0) | 2024.01.15 |
Spring Batch 활용 (0) | 2024.01.14 |
Spring Batch 아키텍처 (1) | 2024.01.14 |
배치 프로그램이란? / Spring Batch를 쓰는 이유 (0) | 2024.01.14 |