拦截步执行
就像工作,执行过程中发生了许多事件步其中 a
用户可能需要执行某些功能。例如,写出一个平面
需要页脚的文件,ItemWriter当步具有
已完成,以便编写尾脚。这可以通过多种方式实现步有视野的听众。
你可以应用任何实现 扩展的类StepListener(听音器)(但不是那个界面
它本身,因为它是空的)到通过听众元素。
这听众元素在步骤、任务小节或区块声明中有效。我们
建议你将听众声明在其功能适用的层级
或者,如果它是多功能的(例如)StepExecutionListener和项目阅读听者),
在适用的最细致层面上声明。
-
Java
-
XML
以下示例展示了在 Java 中块级应用的监听器:
@Bean
public Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
return new StepBuilder("step1", jobRepository)
.<String, String>chunk(10).transactionManager(transactionManager)
.reader(reader())
.writer(writer())
.listener(chunkListener())
.build();
}
以下示例展示了在 XML 中分块层面应用的监听器:
<step id="step1">
<tasklet>
<chunk reader="reader" writer="writer" commit-interval="10"/>
<listeners>
<listener ref="chunkListener"/>
</listeners>
</tasklet>
</step>
一ItemReader,ItemWriter或ItemProcessor该 本身实现了其中一个StepListener(听音器)接口会自动注册于步如果使用
Namespace<阶>元素或*StepFactoryBean工厂。仅此而已
适用于直接注入步.如果监听器嵌套在里面
另一个组件,你需要显式注册(如之前所述)注册ItemStream其中步).
此外StepListener(听音器)接口、注释都被提供以处理
同样的担忧。普通的 Java 对象可以包含这些注释的方法,如下
然后转换为相应的StepListener(听音器)类型。注释也很常见
块组件的自定义实现,例如ItemReader或ItemWriter或任务.这些注释由XML解析器分析<听众/>元素
并且在听者架构材料中的方法,所以你只需要做
是使用 XML 命名空间或构建器来通过步骤注册监听者。
StepExecutionListener
StepExecutionListener代表最通用的听者步执行。它
允许在步开始了,结束后,是否结束了
正常或失败,如下示例所示:
public interface StepExecutionListener extends StepListener {
void beforeStep(StepExecution stepExecution);
ExitStatus afterStep(StepExecution stepExecution);
}
afterStep具有返回类型退出状态,给听众一个机会
修改完成后返回的退出代码步.
对应该接口的注释有:
-
@BeforeStep -
@AfterStep
ChunkListener(分块听众)
“区块”定义为交易范围内处理的项目。提交
事务在每个提交间隔提交一个块。你可以用ChunkListener(分块听众)自
在区块开始处理之前或区块完成后执行逻辑
成功,如下接口定义所示:
public interface ChunkListener extends StepListener {
void beforeChunk(ChunkContext context);
void afterChunk(ChunkContext context);
void afterChunkError(ChunkContext context);
}
beforeChunk 方法在事务开始后但读取开始前调用
在ItemReader.相反Chunk之后在该块被调用之后
承诺(或者如果有回滚则完全不承诺)。
对应该接口的注释有:
-
@BeforeChunk -
@AfterChunk -
@AfterChunkError
你可以应用ChunkListener(分块听众)当没有区块声明时。这任务步是
负责呼叫ChunkListener(分块听众),因此适用于非面向项目的任务项
也(在任务组之前和之后都称为)。
一个ChunkListener(分块听众)不设计用来抛出已检查的异常。错误必须在
实施,否则该步骤将终止。
项目阅读听者
之前讨论跳跃逻辑时,提到记录可能有益
这些记录被跳过,以便以后处理。在读取错误的情况下,
这可以通过ItemReader听者,作为以下接口
定义显示:
public interface ItemReadListener<T> extends StepListener {
void beforeRead();
void afterRead(T item);
void onReadError(Exception ex);
}
这之前阅读每次调用前都会调用方法,读取ItemReader.这读毕每次成功读取调用后调用方法,并传递该项
那是被宣读的。如果读取时出现错误,onReadError称为 方法。
遇到的异常被提供以便记录。
对应该接口的注释有:
-
@BeforeRead -
@AfterRead -
@OnReadError
ItemProcessListener
与项目阅读听者,可以“监听”一个项目的处理过程,如
以下接口定义展示了:
public interface ItemProcessListener<T, S> extends StepListener {
void beforeProcess(T item);
void afterProcess(T item, S result);
void onProcessError(T item, Exception e);
}
这在进程之前方法在过程在ItemProcessor且是
递上要处理的物品。这后处理该方法在
该项目已成功处理。如果处理过程中出现错误,onProcessError称为 方法。遇到的异常和那个物品
尝试处理的记录均已提供,以便进行记录。
对应该接口的注释有:
-
@BeforeProcess -
@AfterProcess -
@OnProcessError
ItemWriteListener
你可以用ItemWriteListener,作为
以下接口定义显示:
public interface ItemWriteListener<S> extends StepListener {
void beforeWrite(List<? extends S> items);
void afterWrite(List<? extends S> items);
void onWriteError(Exception exception, List<? extends S> items);
}
这在写之前方法在写在ItemWriter并被交付给
书写的物品列表。这后写方法在项目 发生后才被调用
成功写入,但在提交与该块处理相关的事务之前。
如果写入时出现错误,onWriteError称为 方法。
遇到的异常和尝试写入的项为
提供,以便记录。
对应该接口的注释有:
-
@BeforeWrite -
@AfterWrite -
@OnWriteError
跳过听众
项目阅读听者,ItemProcessListener和ItemWriteListener所有机制都提供
因为收到错误通知,但没有任何信息告诉你记录实际上已经被通知
跳。onWriteError例如,即使重试了一项,也调用了
成功的。因此,存在一个独立的界面用于追踪跳过的物品,如
以下接口定义展示了:
public interface SkipListener<T,S> extends StepListener {
void onSkipInRead(Throwable t);
void onSkipInProcess(T item, Throwable t);
void onSkipInWrite(S item, Throwable t);
}
onSkipInRead每当阅读时跳过某项时,就称为 。需要注意的是
回滚可能导致同一项目多次被注册为跳过。onSkipInWrite当写作时跳过某项时调用。因为该物品有
成功读取(且未跳过),同时也提供了该项目本身作为
论点。
对应该接口的注释有:
-
@OnSkipInRead -
@OnSkipInWrite -
@OnSkipInProcess