2014-05-21 1 views
1

데이터를 파일에 기록하기위한 판독기, 프로세서 및 작성기가 있습니다.프로세서에서 작성자로 매개 변수 전달

처리되는 데이터의 유형에 따라 다른 위치에 쓰고 싶습니다.

런타임시 데이터를 기록해야하는 판독기 또는 프로세서에서 어떻게 지정할 수 있습니까?

예 (어쩌면 어리석은 일) :

읽기 (항목) -> 과정 (항목)> 쓰기 (사과 폴더)

읽기 (항목) -> 과정 (항목)> 쓰기 (토마토 폴더에)

항목의 순서와 유형을 알 수 없습니다. 필자는 독자와 프로세서에서만이 점을 발견 할 수 있지만 작가는 다시 그 점이 무엇인지 잘 모릅니다.

(reader.getWriter(). setAttribute()와 같은 일을하거나 세션을 사용하는 등의 작업을 수행 할 수있는 방법이 있습니까?

+0

주어진 커밋 간격의 모든 항목이 동일한 디렉토리에 작성된다고 가정해야합니까? 또는 동일한 커밋의 모든 항목을 하나씩 다른 디렉토리에 작성해야합니까? –

+0

@ArnaudPotier 커밋 간격의 모든 항목이 동일한 디렉토리에 속한 것으로 가정합니다. 이것은 100 % 확신합니다. – Dragos

+0

@ArnaudPotier 또한 Michael Minella의 답변에 대한 내 의견을 확인하십시오. 상황이 좀 더 명확해질 수 있습니다. – Dragos

답변

0

컴포지션은 Spring 배치의 강력한 주제입니다. 이 경우 작성해야 할 위치에 따라 ItemWriter 자식에 위임하는 복합체 ItemWriter을 구현해야합니다. 두 가지 옵션이 있습니다. 직접 구현하거나 Spring Batch에서 제공하는 ClassifierCompositeItemWriter을 사용하십시오. 선택 과정에서 논리가 무엇인지에 따라 달라집니다. 현재 문서에 ClassifierCompositeItemWriter에 대한 자세한 내용을보실 수 있습니다 : http://docs.spring.io/spring-batch/trunk/apidocs/org/springframework/batch/item/support/ClassifierCompositeItemWriter.html

한 가지 중요한 참고이 방법을 사용하여 ItemWriter의 자동 ItemStream의로 등록되지 않습니다 대리자이다. 수동으로해야합니다. 여기에서 그 방법을 읽을 수 있습니다 : http://docs.spring.io/spring-batch/trunk/reference/htmlsingle/#delegatePatternAndRegistering

+0

불행히도 당신이 제안하는 것은 거의 불가능합니다. 자세한 내용을 알려 드리겠습니다. 독자는 실제로 크롤러입니다. 하드 디스크에서 각 폴더를 검색하고 파일을 읽습니다. 프로세서는 정보를 분석 한 다음 계속해서 필요한 데이터를 작성자에게 전달합니다. 작가는 모든 것을 소스 폴더에 두어야합니다 (작업을 처음 읽은 곳). 문제는, 폴더가 너무 많아서 각각 하나씩 작성자를 만들 수 없다는 것입니다. 바라건대 당신은 내 필요성을 지금 이해하고 있기를 바랍니다. 처음에는 충분한 세부 정보를 제공하지 않아서 죄송합니다. 고맙습니다! – Dragos

+0

그건 내 대답을 정말로 바꾸지 않습니다. 'FlatFileItemWriter'는 당신이 래퍼'ItemWriter'를 구현하여 입력에 기반하여 자원을 설정할 수있게 해주는'ResourceAwareItemWriterItemStream'을 구현합니다. 그러나 몇 가지주의 사항이 있습니다. 먼저 청크 당 한 번만 설정할 수 있으므로 청크 크기를 적절하게 (잠재적으로 1) 설정해야합니다. 다른주의 사항은 파일을 열거 나 닫을 때 큰 성능이 저하된다는 것입니다. –