본문 바로가기

Spring Batch

(10)
패스트캠퍼스 챌린지 28일차 - Spring Batch 10 📌 spring-batch 10 ✔️ Async Step 일반 step은 ItemReader -> ItemProcessor -> ItemWriter 각 하나씩 수행된다. Async step은 ItemReader는 동일하지만 ItemProcessor와 ItemWrtier가 Async로 수행된다. ✔️ Async ItemProcessor와 ItemWriter를 위한 의존성 추가 implementation 'org.springframework.batch:spring-batch-integration' ✔️ main application에 설정 async 후 배치 수행 후 안전한 종료를 위해 아래 코드를 추가한다. System.exit(SpringApplication.exit(SpringApplication.ru..
패스트캠퍼스 챌린지 27일차 - Spring Batch 9 spring-batch 9 회원등급 조정 배치 프로젝트 ✔️ ItemReader (배치 대상 데이터 읽기) JpaPagingItemReader를 이용해서 페이징 단위로 데이터를 읽는다. private ItemReader
패스트캠퍼스 챌린지 26일차 - Spring Batch 8 📌 spring-batch 8 ✔️ JobExecutionListener 인터페이스로 구현 implements JobExecutionListner 구현 메서드 beforeJob(JobExecution) afterJob(JobExecution) 어노테이션 기반 구현 @BeforeJob @AfterJob 인터페이스 방식과 동일하게 JobExecution을 파라미터로 받음 ✔️ 정의한 Job 리스너 등록 jbf.get("testJob") .incrementer() .start(testStep()) .listener(listener1.class) .listener(listener2.class) .build(); ✔️ StepExecutionListener 어노테이션 기반 구현 @BeforeStep @AfterS..
패스트캠퍼스 챌린지 25일차 - Spring Batch 7 📌 spring-batch 7 ✔️ ItemProcessor Chunk 기반 step을 작성하는 데 있어서 ItemProcessor는 optional하다. ItemReader에서 읽은 배치대상 객체를 가공 및 필터링을 수행한다. InputType -> OutputType null 반환시 해당 item은 write에서 처리 및 저장 ❌ ✔️ 필터링 - 짝수번째만 처리 private ItemProcesor itemProcessor() { return item -> item % 2==0 ? item : null; } ✔️ 필터링 - 중복체크 (파라미터 사용) person.csv로 부터 100개 데이터를 읽는다. 파라미터로 allow_dup를 받는다. 2-1 allow_dup가 true이면 중복을 허용 2-2 ..
패스트캠퍼스 챌린지 24일차 - Spring Batch 6 📌 spring-batch 6 ✔️ ItemWriter 이름은 writer 이지만 항상 쓰기만을 담당하지는 않는다. 처리 대상 데이터 삭제 및 갱신, 이벤트 전송 ... ✔️ 구현체 FlatFileItemWriter (파일에 쓰기) JpaItemWriter (Jpa를 이용해서 DB에 쓰기) JdbcBatchItemWriter ✔️ FlatFileItemWriter BeanWrapperFieldExtractor setNames(new String[] {"id", "name", "age", ...}); 필드명 지정 DelimitedLineAggregator 한 라인에 대한 구분자 설정 setDelimiter(","); // csv의 경우 ','를 구분자로 함 setFieldExtractor(fieldExtr..
패스트캠퍼스 챌린지 23일차 - Spring Batch 5 📌 spring-batch 5 ✔️ Cursor 기반 조회 배치 처리가 모두 완료될 때까지 DB와의 연결을 유지하는 방식이다. DB에 연결을 시도하는 빈도가 낮아 성능이 좋지만 DB와의 긴 연결로 리소스 낭비가 될 수 있다. 하나의 Connection 안에서 처리되기 때문에 Thread safe하지 않다. 모든 결과를 메모리에 할당하므로 메모리 효율이 좋지 않다. ✔️ JDBC의 ResultSet이 Cursor 방식이다. (Cursor를 구현) 연결을 유지한 채로 Cursor의 위치를 한 칸씩 이동하며 데이터를 뽑아 결과를 만들어낸다. ✔️ JdbcCursorItemReader open() : DB 연결 (Connection) update() : Cursor 한 칸씩 이동하며 데이터를 뽑는다. close..
패스트캠퍼스 챌린지 22일차 - Spring Batch 4 📌spring-batch 4 ✔️ Jpa, Jdbc ItemReader 구현체 ItemReader는 배치 대상 데이터를 읽는 기능을 수행한다. ItemReader를 톨해 들어온 데이터는 ItemProcessor 또는 ItemWriter에 전달된다. ✔️ ItemReader와 ItemStream 인터페이스를 구현 ItemReader - read 메서드 ItemStream - open,update,close 메서드 ✔️ Configuration Template 만들기 템플릿 코드 작성 @Configuration @RequiredArgsConstructor @Slf4j public class BatchConfigTemplate { private final JobBuilderFactory jbf; private..
패스트캠퍼스 챌린지 21일차 - Spring Batch 3 📌 spring-batch 3 ✔️ JobExecutionContext Step 간 데이터 공유를 위해 사용 ex) job의 execution context 접근 JobExecution jobExecution = stepExecution.getJobExecution(); JobInstance jobInstance = jobExecution.getJobInstance(); ExecutionContext jobExecutionExecutionContext = jobExecution.getExecutionContext(); ✔️ StepExecutionContext 한 Step 내에서만 데이터 유효하다. Step 간 데이터를 공유하는 것이 아니다. ❌ ex) step의 execution context 접근 S..