2016-07-20 3 views
1

Я новичок в Spring Batch. Я пытался перенести данные с CSV file to XML file &, способный успешно сместить его. Но когда каждый раз, когда я запускаю код, мой XML (выходной файл) получает переопределение, которое я не хочу, вместо этого я хочу создать новый выходной файл (для этого нужно использовать старые выходные файлы, требующие для отслеживания данных). Как я могу это сделать ?Spring Batch - создавать новый файл каждый раз вместо того, чтобы переопределять его для передачи данных из CSV в XML.

Это мой код: Что мне нужно изменить в нижнем файле? Дайте мне знать, если вам нужно больше кода файла с моей стороны.

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:batch="http://www.springframework.org/schema/batch" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation=" 
    http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch.xsd 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 

    <!-- JobRepository and JobLauncher are configuration/setup classes --> 
    <bean id="jobRepository" class="org.springframework.batch.core.repository.support.MapJobRepositoryFactoryBean" /> 

    <bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher"> 
     <property name="jobRepository" ref="jobRepository" /> 
    </bean> 


    <!-- ============= ItemReader reads a complete line one by one from input file ============ --> 
    <bean id="flatFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step"> 

     <!-- Get the Resource file --> 
     <property name="resource" value="classpath:ExamResult.txt" /> 

     <property name="lineMapper"> 
      <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper"> 

       <property name="fieldSetMapper"> 
        <!-- Mapper which maps each individual items in a record to properties in POJO --> 
        <bean class="com.websystique.springbatch.mapper.ExamResultFieldSetMapper" /> 
       </property> 

       <property name="lineTokenizer"> 
        <!-- A tokenizer class to be used when items in input record are separated by specific characters --> 
        <bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer"> 
         <property name="delimiter" value="|" /> 
        </bean> 
       </property> 
      </bean> 
     </property> 
    </bean> 


    <!-- ======== XML ItemWriter which writes the data in XML format =========== --> 
    <bean id="xmlItemWriter" class="org.springframework.batch.item.xml.StaxEventItemWriter"> 

     <property name="resource" value="file:xml/ExamResult.xml" /> 

     <property name="rootTagName" value="UniversityExamResultList" /> 

     <property name="marshaller"> 
      <bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
       <property name="classesToBeBound"> 
        <list> 
         <value>com.websystique.springbatch.model.ExamResult</value> 
        </list> 
       </property> 
      </bean> 
     </property> 
    </bean> 

    <!-- Optional ItemProcessor to perform business logic/filtering on the input records --> 
    <bean id="itemProcessor" class="com.websystique.springbatch.processor.ExamResultItemProcessor" /> 

    <!-- Optional JobExecutionListener to perform business logic before and after the job --> 
    <bean id="jobListener" class="com.websystique.springbatch.listener.ExamResultJobListener" /> 

    <!-- Step will need a transaction manager --> 
    <bean id="transactionManager" class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" /> 


    <!-- ==================== Actual Job =================== --> 
    <batch:job id="examResultJob"> 
     <batch:step id="step1"> 
      <batch:tasklet transaction-manager="transactionManager"> 
       <batch:chunk reader="flatFileItemReader" writer="xmlItemWriter" processor="itemProcessor" commit-interval="10" /> 
      </batch:tasklet> 
     </batch:step> 
     <batch:listeners> 
      <batch:listener ref="jobListener" /> 
     </batch:listeners> 
    </batch:job> 
</beans>  
+0

Используйте параметр задания, чтобы указать выходной файл вместо проводного –

+0

Hi Luca - Как мы можем это сделать? Вы можете показать фрагмент кода? –

+0

SB doc: поздняя привязка http://docs.spring.io/spring-batch/reference/html/configureStep.html#late-binding –

ответ

0

Попробуйте использовать Spring Expression Language (SpEL) добавить дату и время до конца имени выходного файла. Кое-что вроде:

<property name="resource" 
      value="file:xml/ExamResult-#{new java.text.SimpleDateFormat(&quot;Mddyyyyhhmmss&quot;).format(new java.util.GregorianCalendar().getTime())}.xml" />