일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- findTopBy
- Stream
- @TransactionalEventListener
- java
- @Transactional Propagation
- Spring Cloud Netflix
- multipart테스트
- ksql
- Linux
- 자바 ORM 표준 JPA 프로그래밍 정리
- intellij favorites
- intellij 핵심 단축키
- 자바 ORM 표준 JPA 프로그래밍
- 리팩토링 2판
- ksqldb
- 리눅스
- 친절한 SQL 튜닝
- vue.js
- HandlerMethodArgumentResolver
- #docker compose
- aws
- 원격 브랜 삭제
- CompletableFuture
- git
- intellij 즐겨찾기
- IntelliJ
- 백명석님
- JPA
- 마이크로 서비스
- javascript case
- Today
- Total
시그마 삽질==six 시그마
Spring batch 요약 본문
하단의 글은 배달의 민족 이동욱님의 블로그 Spring batch 시리즈를 보고 제 나름대로 정리한겁니다
one Job == sigma step
one step== tasklet & Reader+Processor+Writer
BATCH_JOB_INSTANCE:Job Parameter에 따라 생성
BATCH_JOB_EXECUTION:JOB_INSTACNE의 success/fail
Spring Batch Job 흐름: next ,on(ExitStatus),to,from,end,JobExecutionDecider
Chunk: chunk덩어리 생성후 chunk 단위 tx.chunk 단위 롤백
Reader(1건)->processor->writer(chunk단위)
Chunk Size: 한번에 처리될 tx 단위
Page Size: 한번에 조회할 Item의 양
setting
//spring batch
compile('org.springframework.boot:spring-boot-starter-batch')
testCompile('org.springframework.batch:spring-batch-test')
jdbc-url: jdbc:mysql://localhost:3306/spring_batch?serverTimezone=UTC
schema-mysql.sql로 create 해줌
serverTimezone 없을시…The server time zone value ‘KST’ is unrecognized..error
spring.batch.job.names: ${job.name:NONE}
program arguments는
ex) --job.name=requestParamJob createDate=20201005
Spring Batch Scope & Job Parameter
- 실행시점에 bean 생성
- Late Binding 가능
- @StepScope는 병렬 처리 가능하게해줌
- @StepScope, @JobScope Bean을 생성할때만 Job Parameters가 생성
JobParameter 클래스 Bean을 만들어줘서 inject하라(readerd에서 null로 넘겨도 파라미터 값 사용됨)
ItemReader
-Cursor 기반(한껀씩) ItemReader 구현체 :JdbcCursorItemReader,HibernateCursorItemReader,StoredProcedureItemReader
배치 수행시간길때는 paging방법이 적합 or db와 SocketTimeout을 충분히 큰 값으로 설정해야함
-Paging 기반(여러껀) ItemReader 구현체:JdbcPagingItemReader,HibernatePagingItemReader,JpaPagingItemReader
JpaPagingItemReaders는 Custom JpaPagingItemReader만들자(tx reader단위 tx—>tx chunk단위 tx로 변경 : n+1 보호)
대량의 페이징 조회가 필요한 경우엔(offset 값이 커질수록 느림) QuerydslNoOffsetPagingItemReader 같은 배민의 custom reader 사용하기
Spring Batch에서 영속성 컨텍스트 문제 (processor에서 lazyException문제):chunk와 pageSize 갯수를 똑같이 맞춰주자(기존 tx 초기화되기에)
ex) step에서 chunck(100) / reader에서 reader.setPageSize(100)
@StepScope 사용시 JPA면 메소드 리턴 값을 ItemReader<> 그대로 사용하지 말고(stream이 없음) 구현체(JpaPagingItemReader)를 넣어라
Spring Batch Paging Reader시
1.order by를 해야 정상 페이징 얻는다.
2. (커스텀)CursorItemReader 사용한다.(but 전체조회로 성능이슈, not thread safe)
Spring Batch Paging Reader 동일 조건의 데이터를 읽고 수정할때
1.Cursor 사용
2.PagingReader Override(Page 번호 =0 으로 fix)
ItemWriter
JdbcBatchItemWriter
HibernateItemWriter
JpaItemWriter
Spring Batch ItemWriter에 List 전달할때는 JpaItemWriter의 write를 상속 custom해서 사용하라(items에 받는 로직수정)
ItemProcessor -변환,필터 기능
젠킨스와 spring batch :
1.Spring Batch 공통 설정: Environment variables
2. 중복파라미터 정책 개발 운영 다를시 개발은 임의의 job_parameter줘서 변경
3. 젠킨스 job 하나를 batch step으로 구성 (batch job = batch step으로 만듬) 유연한 처리 가능
Reader와 Writer의 Javadoc에 thread-safe 문구가 있는지 확인
'프로그래밍 > Spring' 카테고리의 다른 글
Spring webflux (0) | 2022.07.19 |
---|---|
@TransactionalEventListener (0) | 2020.10.22 |
Spring Cloud Netflix (0) | 2020.10.18 |
Spring Kafka Basic (0) | 2020.08.25 |
ObjectMapper & OrikaMapper basic (0) | 2020.08.24 |