아래 포스팅에서 이어진 내용입니다.
[springBoot] Simple Spring Batch Tasklet(feat. simple)
스프링 배치를 이용한 정말 간단한 로그 찍는 프로그램이다. 기본 tasklet부분과 meta table 연동해서 날짜 parameter 받아서 화면에 출력하는 정도이다. 스프링 배치를 사용하기 위해선 메타 테이블이...
yaga.tistory.com
![[springBoot] spring batch jpa simpleDbReader (테스트 영상 & 소스코드 포함) [springBoot] spring batch jpa simpleDbReader (테스트 영상 & 소스코드 포함)](https://blog.kakaocdn.net/dn/baRcZU/btsz2ZlX6TS/7B2Aq3Xhuu2IZfB7BJNLk0/img.png)
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
다음 내용
[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
'IT > Live Coding' 카테고리의 다른 글
[springBoot] spring batch simpleTextReader (테스트 영상 & 소스코드 포함) (54) | 2023.11.10 |
---|---|
[springBoot] spring batch simpleReader insert other table(테스트 영상 & 소스코드 포함) (54) | 2023.11.10 |
[springBoot] spring batch simple tasklet (테스트 영상 & 소스코드 포함) (57) | 2023.11.09 |
[Docker] Docker Compose sample(테스트 영상) (52) | 2023.11.07 |
[Docker] Docker Compose [2] (테스트 영상) (48) | 2023.11.05 |
댓글