当前位置: 首页 > 知识库问答 >
问题:

将spring批处理分区配置为处理器和写入器,同时将读取器排除在分区之外

侯和惬
2023-03-14
<step id="masterStep">
        <partition step="slave" partitioner="rangePartitioner">
            <handler grid-size="10" task-executor="taskExecutor" />
        </partition>
    </step>

</job>

<!-- Jobs to run -->
<step id="slave" xmlns="http://www.springframework.org/schema/batch">
    <tasklet>
        <chunk reader="pagingItemReader" writer="flatFileItemWriter"
            processor="itemProcessor" commit-interval="1" />
    </tasklet>
</step>

使用此配置,当作业运行时,将启动作业的10个线程,这也意味着使用了10个读取器,这意味着每个记录将被处理10次,从而使分区无用。

共有1个答案

翟默
2023-03-14

如果没有reader的配置,很难给出确切的修复方法,但我敢打赌,您不会将范围值注入到查询中。下面是在远程分区作业中使用JDBCPagingItemReader示例。您将注意到,正在读取的项的范围是由stepExecutionContext提供的。这些是分区器提供的值。每个ItemReader将获得自己的值。

    <bean id="targetItemReader" class="org.springframework.batch.item.database.JdbcPagingItemReader" scope="step">
        <property name="dataSource" ref="dataSource" />
        <property name="queryProvider">
            <bean
                class="org.springframework.batch.item.database.support.SqlPagingQueryProviderFactoryBean">
                <property name="dataSource" ref="dataSource" />
                <property name="selectClause" value="ID, IP, PORT, CONNECTED, BANNER" />
                <property name="fromClause" value="FROM TARGET" />
                <property name="whereClause" value="ID >= :minId AND ID &lt;= :maxId AND CONNECTED IS NULL"/>
                <property name="sortKey" value="ID" />
            </bean>
        </property>
        <property name="pageSize" value="10" />
        <property name="parameterValues">
            <map>
                <entry key="minId" value="#{stepExecutionContext[minValue]}"/>
                <entry key="maxId" value="#{stepExecutionContext[maxValue]}"/>
            </map>
        </property>
        <property name="rowMapper">
            <bean class="com.michaelminella.springbatch.domain.TargetRowMapper"/>
        </property>
    </bean>
 类似资料:
  • 我有一个批处理步骤 读取器和处理器流程如何工作?读取器是读取块并等待处理器处理它,还是一次读取所有块。

  • (A)ItemReader[第一输入]->(A)ItemProcessor[第一输入]->(B)ItemReader[使用处理过的输入从另一个源收集第二输入]->(B)ItemProcessor[使用处理过的第一输入和第二输入]->{repeat B}->ItemWriter(最终结果) 有没有人知道如何在Spring批处理中这样做?多谢了。

  • 我有“N”没有的。客户/客户。对于每个客户/客户,我需要从数据库(读取器)中获取记录,然后我必须处理(处理器)客户/客户的所有记录,然后我必须将记录写入文件(写入器)。 如何将spring批处理作业循环N次?

  • 根据已接受的答案代码,对该代码的以下调整对我起作用: 我已经将这个问题更新到了一个可以正确循环的版本,但是由于应用程序将扩展,能够处理并行是很重要的,我仍然不知道如何在运行时用javaconfig动态地做到这一点... 基于查询列表(HQL查询),我希望每个查询都有一个读取器-处理器-写入器。我当前的配置如下所示: 工单 处理机 作家 目前,该过程对于单个查询来说工作得很好。然而,我实际上有一个查

  • 我刚开始使用Spring批处理,我有一个特殊问题。我希望使用从3个不同的jpa查询中获取结果,并分别处理它们,然后使用将它们写入一个统一的XML文件。 对于eg,生成的XML看起来像是,

  • 项目读取器将数据从特定源代码读入Spring批处理应用程序,而项目写入器将数据从Spring Batch应用程序写入特定目标。 Item处理器是一个包含处理代码的类,该代码处理读入spring批处理的数据。 如果应用程序读取条记录,则处理器中的代码将在每条记录上执行。 块(chunk)是该tasklet的子元素。 它用于执行读取,写入和处理操作。 可以在如下所示的步骤中配置使用此元素的读取器,写入