IT/development

[springBoot] spring batch jpa simpleDbReader (feat. DB)

알 수 없는 사용자 2023. 11. 10. 09:41
반응형

목차

    아래 포스팅에서 이어진 내용입니다.

     

    [springBoot] Simple Spring Batch Tasklet(feat. simple)

    스프링 배치를 이용한 정말 간단한 로그 찍는 프로그램이다. 기본 tasklet부분과 meta table 연동해서 날짜 parameter 받아서 화면에 출력하는 정도이다. 스프링 배치를 사용하기 위해선 메타 테이블이

    yaga.tistory.com


    spring batch simple reader

    spring batch와 JpaPagingItemReader를 이용해 테이블에서 데이터를 chunk size만큼 가져와서 로그를 출력하는 간단한 예제

    JpaPageJob1 🙂

    package com.lsy.sample.springbatchvideo.batch;
    
    import com.lsy.sample.springbatchvideo.domain.Dept;
    import lombok.RequiredArgsConstructor;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.batch.core.Job;
    import org.springframework.batch.core.Step;
    import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
    import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
    import org.springframework.batch.item.ItemWriter;
    import org.springframework.batch.item.database.JpaPagingItemReader;
    import org.springframework.batch.item.database.builder.JpaPagingItemReaderBuilder;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import javax.persistence.EntityManagerFactory;
    
    @Slf4j
    @RequiredArgsConstructor
    @Configuration
    // dept 테이블에서 데이터 읽어와서 루프 돌며 데이터를 로그로 출력하는 예제
    public class JpaPageJob1 {
    
        private final JobBuilderFactory jobBuilderFactory;
        private final StepBuilderFactory stepBuilderFactory;
        private final EntityManagerFactory entityManagerFactory;
    
        //chunkSize만큼 하기 위함(로직 짜기 나름)
        private int chunkSize = 10;
    
        @Bean
        public Job JpaPageJob1_batchBuild() {
            return jobBuilderFactory.get("jpaPageJob1")
                    .start(JpaPageJob1_step1())
                    .build();
        }
        
        @Bean
        public Step JpaPageJob1_step1() {
            return stepBuilderFactory.get("jpaPageJob1_step1")
                    .<Dept, Dept>chunk(chunkSize)
                    .reader(jpaPageJob1_dbItemReader())
                    .writer(jpaPageJob1_printItemWriter())
                    .build();
    
        }
    
        // reader
        @Bean
        public JpaPagingItemReader<Dept> jpaPageJob1_dbItemReader() {
            return new JpaPagingItemReaderBuilder<Dept>()
                    .name("jpaPageJob1_dbItemReader")
                    .entityManagerFactory(entityManagerFactory)
                    .pageSize(chunkSize)
                    .queryString("SELECT d FROM Dept d order by dept_no asc")
                    .build();
    
        }
    
        // writer
        public ItemWriter<Dept> jpaPageJob1_printItemWriter() {
            return list -> {
                // 잘 찍히나?
                for (Dept dept : list) {
                    log.debug(dept.toString());
                }
            };
        }
    }

    Dept 😄

    package com.lsy.sample.springbatchvideo.domain;
    
    import lombok.*;
    
    import javax.persistence.Entity;
    import javax.persistence.Id;
    
    @Getter
    @Setter
    @ToString
    @AllArgsConstructor
    @NoArgsConstructor
    @Entity
    public class Dept {
    
        @Id
        Integer deptNo;
        String dName;
        String loc;
    }

    DeptRepository 🤗

    package com.lsy.sample.springbatchvideo.domain;
    
    import org.springframework.data.repository.CrudRepository;
    
    public interface DeptRepository extends CrudRepository<Dept, Long> {
    }

    동영상 중 수정해야 될 사항: 

    1. 100건 넣을 때는 위 로직에서는 idx 시작값을 1로 해야 됨(다시 보니 101건이 들어가 있음, 뭐 크게 상관은 없지만 좀 찝찝)
    2. writer객체인 jpaPageJob1_printItemWriter도 @Bean 애노테이션을 붙여야 함

    아직은 디테일하게 이해하지는 못했고 이렇게 쓰는거구나 정도만 이해한 수준이고

    이를 계기로 계속 만들어보고 실무에 사용해보면서 더 디테일하게 공부할 예정


    개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.

    틀린 점 있을 경우 댓글 부탁드립니다.

    reference: https://www.youtube.com/watch?v=wy99cPHlMlA&list=PLogzC_RPf25HRSG9aO7qKrwbT-EecUMMR


    다음 내용

     

    [springBoot] spring batch simpleReader insert other table( feat. DB)

    아래 포스팅에서 이어진 내용입니다. [springBoot] spring batch jpa simpleDbReader (feat. simple Reader) 아래 포스팅에서 이어진 내용입니다. [springBoot] Simple Spring Batch Tasklet(feat. simple) 스프링 배치를 이용한 정

    yaga.tistory.com

     

    반응형