gpt4 book ai didi

java - Spring Batch JdbcBatchItemWriter

转载 作者:行者123 更新时间:2023-11-29 09:04:29 25 4
gpt4 key购买 nike

我正在与读者和作家一起使用 block 步骤。读者正在使用页面大小为 5000 的 JdbcPagingItemReader。作者正在使用 JdbcBatchItemWriter,在 block 步骤上提交间隔为 5000。

    <batch:step id="createRecords">
<tasklet allow-start-if-complete="true" >
<chunk reader="readTable" writer="createNewRecords"
commit-interval="5000" skip-limit="100" >
<skippable-exception-classes>
<batch:include class="java.lang.Exception"/>
</skippable-exception-classes>
</chunk>
</tasklet>
</batch:step>

当我使用这个 block 步骤加载记录时,一切都按我预期的那样工作。它一次插入 5000 条记录(当没有错误时)并且性能符合预期。 10000 条记录在一分钟内处理完毕。

但是,当我使用相同的 block 步骤(完全相同的读取器)并更改写入器使用的 SQL 来执行 UPDATE 语句(作为与 INSERT 相对的基本 SQL 更新)时,应用程序最多需要 30 多分钟对 50K 条记录进行更新,这很差。整个表的 SQL 中的单个更新语句(几乎相同)在几秒钟内运行。如果可能的话,我想利用批处理。

     <bean id="createNewRecords" class="org.springframework.batch.item.database.JdbcBatchItemWriter">
<property name="dataSource" ref="dataSource" />
<property name="sql">
<value>
<![CDATA[
UPDATE TABLE SET TABLE_COLUM = :test
]]>
</value>
</property>
<property name="itemSqlParameterSourceProvider">
<bean class="org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider" />
</property>
</bean>

想知道这听起来像是一个配置问题——还是更新语句被 spring batch JdbcBatchItemWriter 区别对待??

最佳答案

您的更新查询会在每次调用时更新表中的每一行。它需要一个“where”子句,最好基于唯一或主键索引。

关于java - Spring Batch JdbcBatchItemWriter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15794532/

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