重试步骤处理
processJobStep 方法在事务批处理作业中遇到错误时,使用重试步骤处理来重试作业步骤。在 xJCL 中指定重试步骤策略。
每个作业步骤具有其自己的重试步骤策略配置。 通过在 xJCL 中为 com.ibm.batch.step.retry.count 作业步骤属性指定非零值来启用重试步骤处理。
可以通过以下方式来优化重试步骤处理:使用 com.ibm.batch.step.retry.include.exception.class.<n> 属性指定步骤失败时可重试的异常,并使用 com.ibm.batch.step.retry.exclude.exception.class.<n> 属性指定步骤失败时不可重试的异常。这两个属性是互斥的。
批处理框架在本地作业状态数据库中,基于每个步骤跟踪重试步骤处理。步骤处理结束时,会将消息写入作业日志。 此消息指示重试该步骤的次数以及执行该步骤所用的总时钟时间。时钟时间的格式为 HH:MM:SS:MMM,其中 HH 是小时,MM 是分钟,SS 是秒,MMM 是毫秒。
以下列表包含重试步骤属性并后跟描述。
- com.ibm.batch.step.retry.count
指定由于在针对 processJobStep 方法进行步骤处理时发生错误,可重试步骤的次数。达到限制时,不会再重试其他步骤错误。
BatchJobStepInterface.processJobStep 方法支持抛出 java.lang.Exception 子句。processJobStep 方法的任何异常对于重试步骤处理是合理的。
重试步骤等价于重新启动步骤。在发生步骤错误后会调用 BatchJobStepInterface.destroyJobStep 方法。重新启动步骤之前,回滚检查点事务。重试步骤时会调用 BatchJobStepInterface.createJobStep 方法。与步骤关联的所有批处理数据流会关闭,且会在重试时重新打开。
如果在达到重试步骤的限制后步骤发生错误,那么步骤会失败,且作业会以可重新启动的状态结束。
如果向作业步骤上下文注册重试侦听器,那么重试侦听器会在发生每个可重试的异常时接收控制。在失败的步骤进入 destroyJobStep 方法且回滚检查点事务之前,会调用 RetryListener.onError(Throwable t) 方法。重试步骤时,RetryListener.onRetry(Throwable t) 方法会接收控制,但会在调用 BatchJobStepInterface.createJobStep 方法之前接收。
调用 RetryListener.onRetry 方法之后,重试侦听器会立即取消注册。如果需要批处理应用程序侦听将来重试步骤的尝试,那么重新注册重试侦听器。
可重试步骤的次数的运行计数在每个检查点处重置为零。这表示重试限制实际上是基于每个检查点的限制。
缺省情况下,禁用重试步骤处理。
- com.ibm.batch.step.retry.delay.time
指定重试步骤之前要等待的毫秒数。失败的步骤执行完 destroyJobStep 方法且检查点事务回滚后,会发生延迟。但是,延迟会在调用 RetryListener.onRetry 方法之前发生。
- com.ibm.batch.step.retry.include.exception.class.<n>
指定步骤失败时可重试的异常列表。
<n> 为整数。变量以 1 开始,且针对每个异常,此变量递增 1。
如果未指定任何异常,那么缺省情况下,所有异常均包含列表中。
以下示例使用该属性:
<job-step name="WCGStep1"> <classname>com.ibm.ws.batch.sample.WCGSampleBDSBatchStep</classname> <checkpoint-algorithm-ref name="chkpt"/> <results-ref name="jobsum"/> <props> <prop name="com.ibm.batch.step.retry.count" value="1" /> <prop name="com.ibm.batch.step.retry.delay.time" value="3000" /> <prop name="com.ibm.batch.step.retry.include.exception.class.1" value="java.sql.SQLException" /> </props> ... </job-step>
WCGStep1 作业步骤针对结构化查询语言 (SQL) 异常重试作业步骤。
- com.ibm.batch.step.retry.exclude.exception.class.<n>
指定步骤失败时无法重试的异常列表。
<n> 变量为整数。变量以 1 开始,且针对每个异常,此变量递增 1。
如果未指定任何异常,那么缺省情况下,此列表中包含所有异常。
以下示例使用该属性:
<job-step name="WCGStep1"> <classname>com.ibm.ws.batch.sample.WCGSampleBDSBatchStep</classname> <checkpoint-algorithm-ref name="chkpt"/> <results-ref name="jobsum"/> <props> <prop name="com.ibm.batch.step.retry.count" value="1" /> <prop name="com.ibm.batch.step.retry.delay.time" value="3000" /> <prop name="com.ibm.batch.step.retry.exclude.exception.class.1" value="java.sql.SQLException" /> </props> ... </job-step>
WCGStep1 作业步骤不会针对结构化查询语言 (SQL) 异常重试作业步骤。
重试侦听器
您可以使用 JobStepContext 方法注册重试侦听器,以侦听要重试的异常。每当发生可重试的异常且步骤已重试时,重试侦听器都会接收控制。
JobStepContextMgr.getContext().addRetryListener(new MyRetryListener());