반응형
목차
아래 포스팅에서 이어진 내용입니다.
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> {
}
동영상 중 수정해야 될 사항:
- 100건 넣을 때는 위 로직에서는 idx 시작값을 1로 해야 됨(다시 보니 101건이 들어가 있음, 뭐 크게 상관은 없지만 좀 찝찝)
- writer객체인 jpaPageJob1_printItemWriter도 @Bean 애노테이션을 붙여야 함
아직은 디테일하게 이해하지는 못했고 이렇게 쓰는거구나 정도만 이해한 수준이고
이를 계기로 계속 만들어보고 실무에 사용해보면서 더 디테일하게 공부할 예정
개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.
틀린 점 있을 경우 댓글 부탁드립니다.
reference: https://www.youtube.com/watch?v=wy99cPHlMlA&list=PLogzC_RPf25HRSG9aO7qKrwbT-EecUMMR
다음 내용
반응형
'IT > development' 카테고리의 다른 글
[springBoot] spring batch simpleTextReader (feat. file) (54) | 2023.11.10 |
---|---|
[springBoot] spring batch simpleReader insert other table( feat. DB) (54) | 2023.11.10 |
[springBoot] spring batch simple tasklet (feat. tasklet) (57) | 2023.11.09 |
[Java] linux jdk 환경변수 세팅 (54) | 2023.10.27 |
[springBoot] Spring AOP simple source (60) | 2023.10.19 |