在Spring Batch中从数据库中读取记录

时间:2013-04-23 11:05:04

标签: spring-batch spring-batch-admin

我正在尝试使用循环从数据库中读取一些记录,然后对记录进行一些计算(更新名为total的字段)。

但我是春季批次的新手,所以请任何人都可以提供一些提示。

1 个答案:

答案 0 :(得分:6)

这听起来像块模式会解决的问题。您可以使用重用现有的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;
    }

}