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