Spring Batch从2.2到4.x的迁移(分区作业的XML配置)

时间:2019-02-04 17:45:24

标签: spring-integration spring-batch

我正在将具有XML配置的Spring Batch分区作业迁移到Spring Batch4.x。我试图利用MessageChannelPartitionHandler的一项改进,在该过程中,它可以通过回复通道和数据源轮询来查找远程步骤的完成情况。

当我使用此配置时:

<int:channel id="partitioned.jms.requests">
            <int:dispatcher task-executor="springbatch.partitioned.jms.taskExecutor"/>    
</int:channel>
<int:channel id="partitioned.jms.reply" />

    <bean id="partitioned.jms.handler" class="org.springframework.batch.integration.partition.MessageChannelPartitionHandler">
        <property name="messagingOperations">
            <bean class="org.springframework.integration.core.MessagingTemplate">
                <property name="defaultChannel" ref="partitioned.jms.requests"/>
            </bean>
        </property>
        <property name="stepName" value="process.partitioned.step"/>        
        <property name="gridSize" value="${process.step.partitioned.gridSize}"/>        
        <property name="dataSource" ref="springbatch.repositoryDataSource" />
        <property name="pollInterval" value="${springbatch.partition.verification.interval}"/>          
    </bean>

该步骤完成,但是我在日志中看到错误。

no output-channel or replyChannel header available

我查看了该类,看到可以将ReplyChannel属性添加到MessageChannelPartitionHandler类。如果我添加以下内容:

<property name="replyChannel" ref="claim.acp.process.partitioned.jms.reply"/>      

我回到错误状态,需要一个可轮询的通道。

如何创建一个可轮询的通道(假设来自同一JMS队列)?

1 个答案:

答案 0 :(得分:0)

您需要显示其余的配置。

如果对结果使用数据库轮询,请将jms出站网关上的cubes = [ ] for value in cubes = [i**3 for i in range(5)]: print(value) 设置为output-channel,通过JMS收到的答复将被丢弃。

或者,使用出站通道适配器(而不是网关)(以及从站上的入站通道适配器)。这样可以避免完全返回答复。

您必须将"nullChannel"设置为pollRepositoryForResults

回答您的特定问题

true