2012-07-02 2 views
2

내가 일괄 봄에 새로운 오전스프링 배치 작성과 같은 복잡한 XML 출력

<Records xmlns"somevalue" ...> 
    <Version>1.0</Version> 
    <SequenceNo>1</SeqeunceNo> 
    <Date>12/12/2012 12:12:12 PM<Date> 
    <RecordCount>100</RecordCount><!--This is total number of Update and Insert txns--> 
    <SenderEmail>[email protected]</SenderEmail> 
    <Transaction type="Update"> 
    <TxnNo>1</TxnNo> 
    <Details> 
     <MoreDetails> 
     </MoreDetails> 
    </Details> 
    </Transaction> 
    <Transaction type="Insert"> 
    <TxnNo>2</TxnNo> 
    <Details> 
     <MoreDetails> 
     </MoreDetails> 
    </Details> 
    </Transaction> 
    <Transaction type="Update"> 
    </Transaction> 
    <Transaction type="Update"> 
    </Transaction> 
</Records> 

제안하십시오 다음과 같이 내가 데이터베이스에서 읽기 작업을 설계하고 여러 XMLS에 출력 형식은에 데이터를 작성해야 언 마샬 러 (unmarshaller)는 어떻게 사용해야하며 어떻게 시작해야할까요? 결국 나중에 최적화 및 성능을 위해 멀티 스레딩으로 변환해야합니다.

답변

0

XML 파일을 작성하는 작성기를 작성해야합니다. lib를 선택하고 Writer에서 사용하십시오.

향후 멀티 스레드 최적화를 위해 스레드 안전 코드를 작성하십시오.

스프링 배치의 샘플에서 예 : XML Processing

+0

감사합니다. Jean하지만 복잡한 XML에 쓰는 예제를 찾을 수 없습니다. XStreamMarshaller를 사용했지만 어떻게 질문에 언급 된 XML 용으로 사용할 수 있을지 잘 모르겠습니다. 또한이 작업을 위해 기존 스프링 배치 멀티 스레딩을 사용하는 데 필요한 모든 팁 – Shriram

+0

멀티 스레딩을 확인하십시오. http://stackoverflow.com/questions/2326695/how-to-set-up-multi-threading-in-spring-batch/ 3282317 # 3282317 –

0

자신의 라이터를 쓸 필요가 없습니다. Spring은 다중 XML에 항목을 작성하는 MultiResourceItemWriter를 포함합니다. 복잡한 XML을 작성하기 위해 jaxb2Marshaller를 사용하고 있습니다.

<bean id="multiItemWriter" class="org.springframework.batch.item.file.MultiResourceItemWriter"> 
    <property name="resource" value="file:data/output/output.xml"/> 
    <!-- <property name="resourceSuffixCreator" ref="resourceSuffixCreator"/> --> 
    <property name="saveState" value="true"/> 
    <property name="itemCountLimitPerResource" value="10"/> 
    <property name="delegate" ref="itemWriter" /> 
</bean> 

<bean id="itemWriter" class="org.springframework.batch.item.xml.StaxEventItemWriter"> 
    <!-- <property name="resource" value="file:data/output/output.xml" /> --> 
    <property name="marshaller" ref="customVrdbMarshaller" /> 
    <property name="rootTagName" value="recordings" /> 
    <property name="overwriteOutput" value="true" /> 
</bean> 

<bean id="customVrdbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
    <property name="classesToBeBound"> 
     <list> 
      <value>your.model.model.Albums</value> 
     </list> 
    </property> 
</bean>