Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring批处理:填充n个文件,但下一步将显示为空_Java_Spring_Spring Batch - Fatal编程技术网

Java Spring批处理:填充n个文件,但下一步将显示为空

Java Spring批处理:填充n个文件,但下一步将显示为空,java,spring,spring-batch,Java,Spring,Spring Batch,我在spring批处理中实现了一个步骤,从数据库读取记录并生成输出文件。 对该步骤进行分区,以便每个从属步骤生成不同的文件。 然后我实现了一个步骤,这个步骤在从机之后执行,它所做的就是读取每一个 生成的文件并将其合并为单个文件(合并) 我遇到的问题是,当运行consolidator步骤时,输入文件是空的(可能是因为 未执行刷新),然后尝试在从属写入程序中配置forceSync=true和transactional=false,但没有效果 当它们完成作业时,从属文件生成的文件包含数据,合并文件为空

我在spring批处理中实现了一个步骤,从数据库读取记录并生成输出文件。 对该步骤进行分区,以便每个从属步骤生成不同的文件。 然后我实现了一个步骤,这个步骤在从机之后执行,它所做的就是读取每一个 生成的文件并将其合并为单个文件(合并)

我遇到的问题是,当运行consolidator步骤时,输入文件是空的(可能是因为 未执行刷新),然后尝试在从属写入程序中配置forceSync=true和transactional=false,但没有效果

当它们完成作业时,从属文件生成的文件包含数据,合并文件为空。 那么,问题是在执行consolidator步骤时,输入文件是空的

能帮我吗?需要更多信息吗

(对不起我的英语)

谢谢

<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>

我尝试将MultiResourceItemReader用于mergeReader,但仍然存在相同的问题:

<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>

您可能必须使用as
mergeReader
FlatFileItemReader
作为代理。
FlatFileItemReader.resource
属性用于与相对的单个资源
MultiResourceItemReader.resources
(复数)。

好的,我尝试使用MultiResourceItemReader作为mergeReader,但仍然存在相同的问题…我在windows 7上。。。能影响吗?