Spring Batch 3 - Items(Writer)

2024. 3. 20. 14:27·Spring/Batch Programming

2024.03.20 - [Spring/Batch Programming] - Spring Batch 3 - Items(Reader)

 

Spring Batch 3 - Items(Reader)

2024.03.13 - [Spring/Batch Programming] - Spring Batch Step Spring Batch Step 2024.03.13 - [Spring/Batch Programming] - Spring Batch Job Spring Batch Job 2024.03.12 - [Spring/Batch Programming] - Spring Batch 도메인 용어, 실전 Spring Batch 도메인

lsdiary.tistory.com

이전 까지 Item 세가지 중 Reader에 대해서 알아 보았다. 이 글에서는 Writer에 대해서 알아 본다.

ItemWriter 인터페이스

chunk를 받아서 무엇인가를 작성하는 것을 볼 수있다.

출력도 마찬가지로 입력하기 에서의 종류와 같이 여러가지 타입으로 출력할 수 있다.

각각 어떻게 쓰는지 알아본다.

 

Flat File

이런 종류의 메소드들이 있다.

  • shouldDeleteIfEmpty() : 배치가 끝났는데 해당 파일이 비어있으면 제거 or 그대로둠?(footer, header를 제외한 본문만 해당)
  • shouldDeleteIfExists() : 이미 파일이 존재하면 덮어쓸지? 

ex) 이미 파일이 존재하는데 인자로 false를 주면 에러가 난다. 디폴트 값은 true이다. append()와 같이 쓰면 중복되어 쓴다.

  • append() : 존재하면 아래에 덧 붙일건지?

LineAggregator 인터페이스

  • lineAggregator() : 객체를 받아서 라인을 그림
실습

 

    @Bean
    public ItemWriter<User> flatFileItemWriter(){
        return new FlatFileItemWriterBuilder<User>()
                .name("flatFileItemWriter")
                .resource(new PathResource("spring-batch/src/main/resources/new_users.txt"))
                .delimited().delimiter("__")
                .names("name", "age", "region", "telephone")
                .build();
    }

 

새롭게 파일에 잘 써진것을 확인할 수있다.

 

 

@Bean
    public ItemWriter<User> formattedFlatFileItemWriter(){
        return new FlatFileItemWriterBuilder<User>()
                .name("formattedFlatFileItemWriter")
                .resource(new PathResource("spring-batch/src/main/resources/new_formatted_users.txt"))
                .formatted()
                .format("%s의 나이는 %s입니다. 사는곳은 %s, 전화번호는 %s입니다.")
                .names("name", "age", "region", "telephone")
                .build();
    }

 

format을 이용해서 원하는 방식으로 출력 할수있다.

String에서의 format과 동일한 형태이다.

JSON

 

JSON의 경우 형태가 갖춰져 있어 표준화가 되어있기 때문에, 읽기와 차이가 없다.

    @Bean
    public JsonFileItemWriter<User> jsonFileItemWriter(){
        return new JsonFileItemWriterBuilder<User>()
                .name("jsonFileItemWriter")
                .resource(new PathResource("spring-batch/src/main/resources/new_users.json"))
                .jsonObjectMarshaller(new JacksonJsonObjectMarshaller<>())
                .build();
    }

.json 파일 생성

 

데이터베이스 쓰기
  • JpaItemWriter

- JPA 이용

- 한 건씩 insert, update

실습

 

 @Bean
    public JpaItemWriter<User> jpaItemWriter(EntityManagerFactory entityManagerFactory){
        return new JpaItemWriterBuilder<User>()
                .entityManagerFactory(entityManagerFactory)
                .build();
    }

User 테이블

 

매우 간단하게 EntityManagerFactory만 가지고 테이블에 Reader에서 읽은 데이터를 저장하는걸 확인할 수있다.

 

  • JdbcBatchItemWriter(데이터가 많은 경우 성능 향상)

- 벌크 insert, update 제공

- SQL의 사소한 변경이 힘들수도 있다.

 

실습
    @Bean
    public ItemWriter<User> jdbcBatchItemWriter(DataSource dataSource){
        return new JdbcBatchItemWriterBuilder<User>()
                .dataSource(dataSource)
                .sql("""
                        INSERT INTO
                        USER(name, age, region, telephone)
                        VALUES
                        (:name, :age, :region, :telephone)
                        """)
                .beanMapped()
                .build();
    }

DataSource를 주입받아서 사용한다. 

jdbc와 jpa의 선택 기준은 데이터의 양에 따라서 유동적으로 선택하는 것이좋다.

오래걸리고 데이터가 많으면 jdbc 아니면 jpa!

 

2024.03.25 - [Spring/Batch Programming] - Spring Batch 3 - Items(Processor)

 

Spring Batch 3 - Items(Processor)

2024.03.20 - [Spring/Batch Programming] - Spring Batch 3 - Items(Writer) Spring Batch 3 - Items(Writer) 2024.03.20 - [Spring/Batch Programming] - Spring Batch 3 - Items(Reader) Spring Batch 3 - Items(Reader) 2024.03.13 - [Spring/Batch Programming] - Spring

lsdiary.tistory.com

 

'Spring > Batch Programming' 카테고리의 다른 글

Spring Batch 확장  (0) 2024.03.25
Spring Batch 3 - Items(Processor)  (0) 2024.03.25
Spring Batch 3 - Items(Reader)  (0) 2024.03.20
Spring Batch Step  (0) 2024.03.13
Spring Batch Job  (0) 2024.03.13
'Spring/Batch Programming' 카테고리의 다른 글
  • Spring Batch 확장
  • Spring Batch 3 - Items(Processor)
  • Spring Batch 3 - Items(Reader)
  • Spring Batch Step
Ls._.Rain
Ls._.Rain
안되면 될때까지 삽질했던 기록
  • Ls._.Rain
    Ls{Diary}
    Ls._.Rain
  • 전체
    오늘
    어제
    • 분류 전체보기 (136)
      • Github (2)
      • Spring (51)
        • Batch Programming (13)
        • 결제 (4)
        • 대용량 트래픽 (32)
        • OpenAI (0)
        • Security (0)
        • WebSocket (0)
        • JPA (1)
      • Algorithm (67)
        • DFS (6)
        • BFS (6)
        • Dynamic Programming (10)
        • Brute Force (4)
        • Binary Search (6)
        • 구현, 시뮬레이션 (15)
        • Stack (1)
        • Greedy (4)
        • Priority_Queue (2)
        • Back Tracking (3)
        • Geometry (2)
        • SCC (1)
        • 투포인터 (4)
        • 최대유량 (1)
        • 정렬 (1)
      • OS (0)
      • DevOps (15)
        • AWS (11)
        • Docker (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • hELLO· Designed By정상우.v4.10.0
Ls._.Rain
Spring Batch 3 - Items(Writer)
상단으로

티스토리툴바