我正在尝试使用循环从数据库中读取一些记录,然后对记录进行一些计算(更新一个名为 total 的字段)。
但我是春季批次的新手,所以请任何人都可以为我提供一些提示。
我正在尝试使用循环从数据库中读取一些记录,然后对记录进行一些计算(更新一个名为 total 的字段)。
但我是春季批次的新手,所以请任何人都可以为我提供一些提示。
这听起来像是块模式要解决的问题。您可以重用现有的 Spring Batch 组件从数据库中读取数据,组成自己的处理器,然后传回 Spring Batch 组件进行存储。
说用例是这样的;- 读取记录 - record.setTotalColumn(record.getColumn2() + record.getColumn3()) - 更新
此配置可能如下所示
<batch:job id="recordProcessor">
<batch:step id="recordProcessor.step1">
<batch:tasklet>
<batch:chunk reader="jdbcReader" processor="calculator" writer="jdbcWriter" commit-interval="10"/>
</batch:tasklet>
</batch:step>
</batch:job>
<bean id="jdbcReader" class="org.springframework.batch.item.database.JdbcCursorItemReader">
<property name="dataSource" ref="dataSource"/>
<property name="sql" value="select idColumn,column1,column2,totalColumn from my_table"/>
<property name="rowMapper" ref="myRowMapper"/>
</bean>
<bean id="jdbcWriter" class="org.springframework.batch.item.database.JdbcBatchItemWriter">
<property name="dataSource" ref="dataSource"/>
<property name="sql" value="update my_table set totalColumn = :value where idColumn = :id"/>
</bean>
<bean id="calculator" class="de.incompleteco.spring.batch.step.item.CalculationProcessor"/>
这意味着您唯一需要从头开始“编写”的就是计算器处理器,它可以像这样;
package de.incompleteco.spring.batch.step.item;
import org.springframework.batch.item.ItemProcessor;
public class CalculationProcessor implements ItemProcessor<MyObject, MyObject> {
@Override
public MyObject process(MyObject item) throws Exception {
//do the math
item.setTotalColumn(item.getColumn1() + item.getColumn2());
//return
return item;
}
}