Spring Batch如何设置Chunk tasklet中每个调用之间的时间间隔

时间:2012-04-27 10:42:18

标签: java batch-processing spring-batch

我正在做一个技术工作,用于从平面文件中读取记录并将数据插入数据库。

我正在使用chunk任务并成功使用spring batch admin运行此作业。

我必须实现重试策略以及设置每次重试之间的时间间隔的功能。我很难设置每次重试之间的时间间隔,因为chuck不直接支持它。这有什么工作吗?

我的代码是

<batch:job id="importDataJob" job-repository="jobRepository">
  <batch:step id="importDataStep">
    <batch:tasklet transaction-manager="transactionManager">
      <batch:chunk reader="dataReader" writer="dataWriter"  commit-interval="1" retry-limit="3">
        <batch:retryable-exception-classes>
          <batch:include class="javax.naming.ServiceUnavailableException" />
        </batch:retryable-exception-classes>
      </batch:chunk>
    </batch:tasklet>
  </batch:step>
</batch:job>

1 个答案:

答案 0 :(得分:5)

在您的情况下,配置将如下所示:

Spring Batch 2.x

<bean id="stepParent" class="org.springframework.batch.core.step.item.FaultTolerantStepFactoryBean" abstract="true">
  <property name="backOffPolicy">
    <bean class="org.springframework.batch.retry.backoff.FixedBackOffPolicy"
      <property name="backOffPeriod" value="2000" />
    </bean>
  </property>
</bean>

<batch:job id="importDataJob" job-repository="jobRepository">
  <batch:step id="importDataStep" parent="stepParent">
     ...
  </batch:step>
</batch:job>

不幸的是,batch命名空间不支持将backOffPolicy直接设置为step,请参阅BATCH-1441

Spring Batch 3.0

在Spring Batch 3.0中,一些类已移至其他包。这是配置片段:

<bean id="stepParent"
  class="org.springframework.batch.core.step.factory.FaultTolerantStepFactoryBean"         
  abstract="true">

  <property name="backOffPolicy">
    <bean class="org.springframework.retry.backoff.FixedBackOffPolicy">
      <property name="backOffPeriod" value="2000"/>
    </bean>
  </property>

</bean>