你能在Spring Batch中为Partitioner配置ItemReader吗?

时间:2015-06-24 11:19:33

标签: spring-batch partitioning

我有以下要求:CSV输入文件包含其中一个字段是ID的行。可以有多个具有相同ID的行。这些行应按按ID 进行处理(意味着,如果一行未通过验证,则具有相同ID的所有行都将无法处理)。可以并行处理这些行组。

我有一个可以正常工作的实现,但它是在Partitioner实现中使用我自己的代码读取CSV输入文件。如果我可以使用开箱即用的实现(例如FlatFileItemReader)并且只是像配置Chunk步骤那样配置它会更好。

为了澄清,我的工作配置是这样的:

<batch:job id="job">
    <batch:step id="partitionStep">
        <batch:partition step="chunkStep" partitioner="partitioner">
            <batch:handler grid-size="10" task-executor="taskExecutor" />
        </batch:partition>      
    </batch:step>       
</batch:job>

<batch:step id="chunkStep">
    <batch:tasklet transaction-manager="transactionManager">
        <batch:chunk reader="reader" processor="processor" writer="writer" chunk-completion-policy="completionPolicy">
            .. skip and retry policies omitted for brevity              
        </batch:chunk>              
    </batch:tasklet>
</batch:step>

<bean id="partitioner" class="com.acme.InputFilePartitioner" scope="step">
    <property name="inputFileName" value="src/main/resources/input/example.csv" />
</bean>

<bean id="reader" class="org.springframework.batch.item.support.ListItemReader" scope="step">
    <constructor-arg value="#{stepExecutionContext['key']}"/>   
</bean> 

分区程序实现读取输入文件,&#34;手动&#34;解析行以获取ID字段,按ID分组并将它们放入Lists中,并创建ExecutionContexts,每个都获得其中一个列表。

如果我可以替换那个&#34;手册&#34;那将是很好的。通过配置带有ObjectMapper的FlatFileItemReader配置分区程序中的代码。 (我希望我能清楚地表达自己的意思)。

有可能吗?

0 个答案:

没有答案