IT/Live Coding

[springBoot] spring batch simpleReader insert other table(테스트 영상 & 소스코드 포함)

알 수 없는 사용자 2023. 11. 10.

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

 

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

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

yaga.tistory.com


[springBoot] spring batch simpleReader insert other table(테스트 영상 & 소스코드 포함)

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