2017-05-03 25 views

답변

2

버퍼링 등의 세부 사항 때문에 FlatFileItemReader 인스턴스의 파일 이름을 변경할 수 없습니다. 그러나 동일한 작업을 수행하는 데 사용할 수있는 두 가지 방법이 있습니다.

ClassifierCompositeItemWriter
ClassifierCompositeItemWriter 사용하여 각각에 대해 하나 FlatFileItemWriter은 당신이 쓰고 싶은 파일을 만들 것입니다. 그런 다음 입력 항목을 기준으로 리더를 선택하는 Classifier 구현을 만듭니다. ClassifierCompositeItemWriterClassifier을 사용하여 각 항목에 사용할 작성기를 선택합니다.

현재 문서에서 ClassifierCompositeItemWriter에 대한 자세한 읽을 수 있습니다 : 다음과 같은 조건이 충족 될 경우에 당신은 같은 일을 처리하기 위해 파티션을 사용할 수, http://docs.spring.io/spring-batch/apidocs/org/springframework/batch/item/support/ClassifierCompositeItemWriter.html

자원에 의해 분할
을 :

  1. 복수 입력 파일
  2. 복수 출력 파일
  3. 입력 파일 레는 출력 파일 정보의 추가 속성과 함께 상기 MultiResourcePartitioner 유사하다는 Partitioner, 당신은 MultiResourcePartitioner으로 (개별적으로 동일한 로직을 각각의 파일을 처리 할 수 ​​구현이 경우 병렬

에서 처리 될 수있다 잘). 단계별로 범위가 지정된 리더 및 라이터를 사용하면 입력 소스 및 출력 대상을 동적으로 구성 할 수 있습니다. http://docs.spring.io/spring-batch/reference/html/scalability.html#partitioning

+0

감사를 통찰력 :

현재 분할에 대한 자세한 내용을보실 수 있습니다. 두 가지 모두 유망한 것으로 들리므로 다음 유스 케이스에 사용할 것을 권장합니다. 약 20.000 개의 압축 CSV 파일로 각각 수 mb입니다. 모든 파일을 읽고 변환 (= 데이터를 제거)하고 마지막으로 출력 파일에 기록해야합니다. 그래서 결국 출력 디렉토리에 20.000 개의 csv 파일이 있어야합니다. 처리 순서는 중요하지 않습니다. 전체 프로세스가 하루에 여러 번 실행되어야합니다. 이 상황에 가장 적합한'MultiResourcePartitioner'는 무엇입니까? – membersound

+1

이 유스 케이스에 대해 파티셔닝을 사용할 수 있다면 가능합니다. 아마도 구현하기가 더 쉬우 며 필요한 경우 추가 확장이 가능합니다. –

+0

나는 파티셔를 시도하고 일반적으로 작동합니다. 하지만 : 작성된 파일 이름은 프로세서 내부에서 처음으로 알려진 값 (파일의 첫 번째 줄에서 값)을 포함해야합니다. 어떻게이 값을 'FlatFileItemWriter'에'stepExecutionContext'로 전달하여 그 이름을 고려할 수 있습니까? – membersound

관련 문제