스프링 데이터 JPA와 스프링 배치와 함께 스프링 부트 1.5.7을 사용하고 있습니다. 엔티티를 읽으려면 JpaPagingItemReader<T>
을 사용하고 엔티티를 읽으려면 JpaItemWriter<T>
을 사용합니다. 내가하고 싶은 것은 특정 데이터베이스 테이블에서 데이터를 읽은 다음 다른 형식으로 변환하고 다른 테이블에 다시 쓰는 것입니다. 원시 json 문자열을 읽고 deserialize하고 특정 테이블에 삽입합니다.상태 변경을 통한 스프링 일괄 쿼리
나는 처리 한 후에 읽은 데이터를 삭제할 계획이 아니라 처리 된 것으로 표시하려고합니다. 그것에 어떤 포인터가없는 경우
@Bean
public ItemReader<RdJsonStore> reader(){
JpaPagingItemReader<RdJsonStore> reader = new JpaPagingItemReader<>();
reader.setEntityManagerFactory(entityManagerFactory);
reader.setQueryString("select e from RdJsonStore e "+
"where e.jsonStoreProcessedPointer is null");
reader.setPageSize(rawDataProperties.getBatchProcessingSize());
return reader;
}
은 그래서 읽기 전용 것 : 문제는 내가 이런 일에 질의를 한 경우
JpaPagingItemReader
핸들이 잘 읽는 것입니다. 나는 항목을 처리 한 후에 포인터를 삽입 할 것입니다 (일괄 처리에서는 1000 개의 항목을 처리하고 모든 ID를 포인터 테이블에 게시하는 것처럼).
이렇게 실행될 때 반환되는 데이터를 변경하면 ItemWriter (및 JPA 하나)가 데이터를 처리 할 수 있습니까 (쿼리 할 항목은 모든 배치와 함께 축소됩니다)?
포인터 솔루션을 적용 할 수없는 경우 DB 대 DB 일괄 처리 작업을 어떻게 설계해야합니까?
내 소스 테이블은 다음과 같습니다
당신이 방법doReadPage()
를 들어,
JpaPagingItemReader
의 코드를 보면
아니, 기본 데이터가 변경되고 각 페이지에 대해 쿼리가 다시 실행되면 데이터가 손실되기 시작합니다. –
@ M.Deinum 그게 내가 생각한 바예요. ( – appl3r