gpt4 book ai didi

java - 将 Spring Batch 分区配置为处理器和写入器,同时从分区中排除读取器

转载 作者:行者123 更新时间:2023-12-01 18:31:25 25 4
gpt4 key购买 nike

我正在使用 spring 批处理分区来运行作业的多个线程。该作业应该从数据库读取,处理数据并将结果写入数据库文件,以下是我当前工作的配置。

<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 个实例

最佳答案

如果没有针对您的阅读器的配置,很难为您提供准确的修复,但我敢打赌您不会将范围值注入(inject)查询中。下面是在远程分区作业中使用 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>

您可以在我在 YouTube 上的演讲中了解有关远程分区的更多信息:https://www.youtube.com/watch?v=CYTj5YT7CZU该演讲的代码在这里:https://github.com/mminella/Spring-Batch-Talk-2.0

关于java - 将 Spring Batch 分区配置为处理器和写入器,同时从分区中排除读取器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23998495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com