在Spring批处理中,有六个“侦听器”来拦截步骤执行,我相信类名应该是不言自明的。
- StepExecutionListener
- ItemReadListener
- ItemProcessListener
- ItemWriteListener
- 块监听器
- 跳过监听器
1.侦听器示例
三个侦听器示例,除了打印出一条消息外,什么也不做。
CustomStepListener.java
package com.mkyong.listeners;
import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.core.StepExecutionListener;
public class CustomStepListener implements StepExecutionListener {
@Override
public void beforeStep(StepExecution stepExecution) {
System.out.println("StepExecutionListener - beforeStep");
}
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
System.out.println("StepExecutionListener - afterStep");
return null;
}
}
CustomItemReaderListener.java
package com.mkyong.listeners;
import org.springframework.batch.core.ItemReadListener;
import com.mkyong.Domain;
public class CustomItemReaderListener implements ItemReadListener<Domain> {
@Override
public void beforeRead() {
System.out.println("ItemReadListener - beforeRead");
}
@Override
public void afterRead(Domain item) {
System.out.println("ItemReadListener - afterRead");
}
@Override
public void onReadError(Exception ex) {
System.out.println("ItemReadListener - onReadError");
}
}
CustomItemWriterListener.java
package com.mkyong.listeners;
import java.util.List;
import org.springframework.batch.core.ItemWriteListener;
import com.mkyong.Domain;
public class CustomItemWriterListener implements ItemWriteListener<Domain> {
@Override
public void beforeWrite(List<? extends Domain> items) {
System.out.println("ItemWriteListener - beforeWrite");
}
@Override
public void afterWrite(List<? extends Domain> items) {
System.out.println("ItemWriteListener - afterWrite");
}
@Override
public void onWriteError(Exception exception, List<? extends Domain> items) {
System.out.println("ItemWriteListener - onWriteError");
}
}
2.批处理作业
批处理作业,附加在三个侦听器上方。
spring-batch-job.xml
<bean id="customStepListener"
class="com.mkyong.listeners.CustomStepListener" />
<bean id="customItemReaderListener"
class="com.mkyong.listeners.CustomItemReaderListener" />
<bean id="customItemWriterListener"
class="com.mkyong.listeners.CustomItemWriterListener" />
<job id="readFileJob" xmlns="http://www.springframework.org/schema/batch">
<step id="step1">
<tasklet>
<chunk reader="multiResourceReader" writer="flatFileItemWriter"
commit-interval="1" />
<listeners>
<listener ref="customStepListener" />
<listener ref="customItemReaderListener" />
<listener ref="customItemWriterListener" />
</listeners>
</tasklet>
</step>
</job>
假设加载了一个csv文件中的3条记录,并将其写入某处,这是控制台输出:
StepExecutionListener - beforeStep
ItemReadListener - beforeRead
ItemReadListener - afterRead
ItemWriteListener - beforeWrite
ItemWriteListener - afterWrite
ItemReadListener - beforeRead
ItemReadListener - afterRead
ItemWriteListener - beforeWrite
ItemWriteListener - afterWrite
ItemReadListener - beforeRead
ItemReadListener - afterRead
ItemWriteListener - beforeWrite
ItemWriteListener - afterWrite
StepExecutionListener - afterStep
下载源代码
下载它– SpringBatch-Listener-Example.zip (14 KB)
参考文献
- 拦截步骤执行
- StepExecutionListener JavaDoc
- ItemReadListener JavaDoc
- ItemProcessListener JavaDoc
- ItemWriteListener JavaDoc
- ChunkListener JavaDoc
- SkipListener JavaDoc
翻译自: https://mkyong.com/spring-batch/spring-batch-listeners-example/