[SPRING] Spring-Batch를 사용하여 id-column으로 채워 넣은 csv 줄을 읽는 방법?
SPRINGSpring-Batch를 사용하여 id-column으로 채워 넣은 csv 줄을 읽는 방법?
저는 Spring-Batch를 사용하여 CSV 파일을 읽고 내용을 포맷하고 다음과 같이 데이터베이스에 씁니다.
StepBuilder<T, T> builder = stepBuilderFactory.get("step")
.<T, T>chunk(100)
.reader(flatFileItemReader)
.processor(processor)
.writer(jpaItemWriter);
csv에 ID 열이 있습니다. ID에서 청크를 기반으로 독자를 수정할 수 있습니까? Examle :
#id, #value
1, first
1000, second
1001, second
1005, second
이 경우 청크는 첫 번째 행을 읽고 커밋 한 다음 계속 진행합니다.
파일에서 값으로 청킹을 적용 할 수 있습니까?
해결법
-
==============================
1.커스텀 CompletionPolicy와 PeekableItemReader를 사용하여 동일한 작업을 수행했습니다. 코드 뒤에있는 아이디어는 다음 항목을 살펴보고 다음 요소를 읽고 값 변경을 확인하는 것입니다. 값이 변경되면 CompletionPolicy.isComplete ()에서 true를 반환합니다.
커스텀 CompletionPolicy와 PeekableItemReader를 사용하여 동일한 작업을 수행했습니다. 코드 뒤에있는 아이디어는 다음 항목을 살펴보고 다음 요소를 읽고 값 변경을 확인하는 것입니다. 값이 변경되면 CompletionPolicy.isComplete ()에서 true를 반환합니다.
중요 :이 정책은 단계 리스너로 등록해야합니다!
public class BreakKeyCompletionPolicy extends CompletionPolicySupport{ private BreakKeyCompletionContext cc; private PeekableItemReader<Object> reader; // Strategy used to check for value break private BreakKeyStrategy<Object> strategy; public void setReader(PeekableItemReader<Object> forseeingReader){ this.reader = forseeingReader; } @Override public boolean isComplete(RepeatContext context){ return this.cc.isComplete(); } @Override public RepeatContext start(RepeatContext context) { context.setAttribute("current", null); this.cc = new BreakKeyCompletionContext(context); return cc; } /** Context contains current element ("current" property" and manage next element. * Null next element is treated as a key break */ protected class BreakKeyCompletionContext extends RepeatContextSupport { public BreakKeyCompletionContext(RepeatContext context) { super(context); } public boolean isComplete(){ final Object next; try{ next = reader.peek(); } catch (Exception e){ throw new NonTransientResourceException("Unable to peek", e); } if (null == next){ return true; } return strategy.isKeyBreak(this.getAttribute("current"), next); } } @AfterRead public void afterRead(Object item){ this.cc.setAttribute("current", item); } }
from https://stackoverflow.com/questions/26905278/how-to-read-csv-lines-chunked-by-id-column-with-spring-batch by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스트럿츠 인터셉터에 봄 콩을 주입하는 법 .. 가능하다. (0) | 2019.01.07 |
---|---|
[SPRING] 일대 다 관계를 지속 할 때 제약 조건 위반 (0) | 2019.01.07 |
[SPRING] UnknownServiceException : 요청 된 알 수없는 서비스 (최대 절전 모드 / 봄) (0) | 2019.01.07 |
[SPRING] CORS 허용 원점 제한으로 인해 서버가 요청을 거부하지 않습니다 (여전히 브라우저에서 사이트에 액세스 할 수 있음) (0) | 2019.01.07 |
[SPRING] HTTP 요청 압축 (0) | 2019.01.06 |