简体   繁体   English

春季批处理:填充n个文件,但下一步显示为空

[英]Spring Batch: Fill n files but the next step sees empty

I implemented a step in spring batch that reads records from the database and generates output files. 我在spring batch中实现了一个步骤,该步骤从数据库读取记录并生成输出文件。 The step is partitioned so that each slave step generates a different file. 该步骤已分区,因此每个从属步骤都会生成一个不同的文件。 Then I implemented a step which is executed after the slaves, and what it does is to read each of these generated files and consolidate them into a single file (merge). 然后,我执行了一个在从属服务器之后执行的步骤,它的作用是读取每个生成的文件并将它们合并为一个文件(合并)。

The problem I am having is that when run the consolidator step, the input files are empty (probably because no flush was performed), then tried to configure forceSync = true and transactional = false in the slave writer, but without effect. 我遇到的问题是,在运行合并器步骤时,输入文件为空(可能是因为未执行刷新),然后尝试在从属写入器中配置forceSync = true和transactional = false,但没有任何效果。

When they finish the job, the files generated by the slaves contains data, and the merge file is empty. 当他们完成工作时,从站生成的文件包含数据,并且合并文件为空。 The problem, then, is that the input files are empty at the time of execution of consolidator step. 那么问题是,在执行合并器步骤时,输入文件为空。

Can help me?, needs more information? 需要帮助吗?,需要更多信息吗?

(sorry for my english) (对不起我的英语不好)

thanks 谢谢

<batch:job id="interfacesJob" xmlns="">
    <batch:step id="step.1" parent="readerParent" next="step.2"/>
    <batch:step id="step.2" parent="merge"/>
</batch:job>

<batch:step id="readerParent">
    <batch:partition step="slave" partitioner="partitioner">
        <batch:handler grid-size="50" task-executor="poolTaskExecutor" />
    </batch:partition>
</batch:step>

<batch:step id="slave">
    <batch:tasklet 
        transaction-manager="transactionManager">
        <batch:chunk
            reader="dummyReader" 
            processor="dummyProcessor"
            writer="dummyWriter" 
            commit-interval="1"
            skip-limit="50">
    </batch:tasklet>
</batch:step>

<bean id="dummyWriter"
      class="org.springframework.batch.item.file.FlatFileItemWriter"
      scope="step" >
    <property name="resource" value="file:operations_#{stepExecutionContext[fromId]}.txt" />
    <property name="forceSync" value="true" />
    <property name="transactional" value="false" />
    <property name="lineAggregator">
        <bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
            <property name="delimiter" value="," /> <!-- default -->
            <property name="fieldExtractor">
                <bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
                    <property name="names" value="id,field1,field2" />
                </bean>
            </property>
        </bean>
        </property>
</bean>

<batch:step id="merge">
    <tasklet>
        <chunk reader="mergeReader" writer="mergeWriter" commit-interval="1" />
    </tasklet>
</batch:step>

<bean id="mergeReader" 
       class="org.springframework.batch.item.file.FlatFileItemReader">
       <property name="resources" value="file:operations_*.txt" />
       <property name="lineMapper">
        <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
          <property name="lineTokenizer">
            <bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
                <property name="delimiter" value="," />
            <property name="names" value="id,field1,field2" />
            </bean>
              </property>
              <property name="fieldSetMapper">
            <bean class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
            <property name="prototypeBeanName" value="dummyPrototypeBean" />
            </bean>
              </property>
       </bean>
      </property>
</bean>

<bean id="mergeWriter"
      class="org.springframework.batch.item.file.FlatFileItemWriter">
      <property name="resource" value="file:final.txt" />
      <property name="lineAggregator">
    <bean class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
        <property name="delimiter" value="," /> 
        <property name="fieldExtractor">
            <bean class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
                <property name="names" value="id,field1,field2" />
            </bean>
        </property>
    </bean>
      </property>
</bean>

I taste with a MultiResourceItemReader for the mergeReader, but still continue with the same problem: 我为mergeReader使用了MultiResourceItemReader,但仍然遇到相同的问题:

<bean id="mergeReader"
 class="org.springframework.batch.item.file.MultiResourceItemReader">
   <property name="resources" value="file:operations_*.txt" />
   <property name="delegate" ref="mergeReaderSpecific" />
 </bean>



<bean id="mergeReaderSpecific" 
      class="org.springframework.batch.item.file.FlatFileItemReader">
       <property name="lineMapper">
           <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
               <property name="lineTokenizer">
                  <bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
                      <property name="delimiter" value="," />
                      <property name="names" value="id,field1,field2" />
                   </bean>
               </property>
               <property name="fieldSetMapper">
                  <bean class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
                      <property name="prototypeBeanName" value="dummyPrototypeBean" />
                  </bean>
               </property>
          </bean>
       </property>
</bean>

Probably you have to use a MultiResourceItemReader as mergeReader using a FlatFileItemReader as delegate. 可能必须使用FlatFileItemReader作为委托,将MultiResourceItemReader用作mergeReader
FlatFileItemReader.resource property is intended to be used on a single resource opposite to MultiResourceItemReader.resources (plurals). FlatFileItemReader.resource属性旨在在与MultiResourceItemReader.resources (复数)相反的单个资源上使用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM