IT/development

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

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

목차

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

     

    [springBoot] spring batch jpa simpleDbReader (feat. simple Reader)

    아래 포스팅에서 이어진 내용입니다. [springBoot] Simple Spring Batch Tasklet(feat. simple) 스프링 배치를 이용한 정말 간단한 로그 찍는 프로그램이다. 기본 tasklet부분과 meta table 연동해서 날짜 parameter 받

    yaga.tistory.com


    dept 테이블에서 데이터를 읽고 살짝 가공 후 dept2 테이블에 저장하는 단순한 예제

    JpaPageJob2 🤗

    package com.lsy.sample.springbatchvideo.batch;
    
    import com.lsy.sample.springbatchvideo.domain.Dept;
    import com.lsy.sample.springbatchvideo.domain.Dept2;
    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.ItemProcessor;
    import org.springframework.batch.item.ItemWriter;
    import org.springframework.batch.item.database.JpaItemWriter;
    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 테이블에서 데이터 읽어와서 "NEW_" 접두어 붙여서 dept2 테이블에 저장하는 예제
    public class JpaPageJob2 {
    
        private final JobBuilderFactory jobBuilderFactory;
        private final StepBuilderFactory stepBuilderFactory;
        private final EntityManagerFactory entityManagerFactory;
    
        //chunkSize만큼 하기 위함(로직 짜기 나름)
        private int chunkSize = 10;
    
        @Bean
        public Job JpaPageJob2_batchBuild() {
            return jobBuilderFactory.get("jpaPageJob2")
                    .start(jpaPageJob2_step1())
                    .build();
        }
    
        @Bean
        public Step jpaPageJob2_step1() {
            return stepBuilderFactory.get("jpaPageJob2_step1")
                    .<Dept, Dept2>chunk(chunkSize)
                    .reader(jpaPageJob2_dbItemReader())
                    .processor(jpaPageJob2_processor())
                    .writer(jpaPageJob2_dbItemWriter())
                    .build();
    
        }
    
        private ItemProcessor<Dept, Dept2> jpaPageJob2_processor() {
            return dept -> {
                // 가공한 데이터를 의미
                return new Dept2(dept.getDeptNo(), "NEW_" + dept.getDName(), "NEW_" + dept.getLoc());
            };
        }
    
        // reader
        @Bean
        public JpaPagingItemReader<Dept> jpaPageJob2_dbItemReader() {
            return new JpaPagingItemReaderBuilder<Dept>()
                    .name("jpaPageJob2_dbItemReader")
                    .entityManagerFactory(entityManagerFactory)
                    .pageSize(chunkSize)
                    .queryString("SELECT d FROM Dept d order by dept_no asc")
                    .build();
    
        }
    
        // writer
        public JpaItemWriter<Dept2> jpaPageJob2_dbItemWriter() {
            JpaItemWriter<Dept2> jpaItemWriter = new JpaItemWriter<>();
            jpaItemWriter.setEntityManagerFactory(entityManagerFactory);
            return jpaItemWriter;
        }
    }

    Dept2, DeptRepository2는 기존 클래스 그대로 복붙 하고 클래스명만 2를 붙임

    기존 내용에서 processor 추가됨


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

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

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


    다음 내용

     

    [springBoot] spring batch simpleTextReader (feat. file)

    아래 포스팅에서 이어진 내용입니다. [springBoot] spring batch simpleReader insert other table( feat. JPA) 아래 포스팅에서 이어진 내용입니다. [springBoot] spring batch jpa simpleDbReader (feat. simple Reader) 아래 포스팅에

    yaga.tistory.com

     

    반응형