java - Spring批处理:在监听器中获取ExecutionContext
问题描述
我是春季批次的新手。我需要计算读取、写入和出错的元素。
我已经定义了这样一个步骤:
/*...*/
@Bean
public Step stepMain(StepBuilderFactory stepBuilderFactory) {
return stepBuilderFactory.get("stepMain").<T, T> chunk(this.chuckSize).reader(reader(null, null)).processor(new Processor()).writer(writer()).faultTolerant().skipPolicy(new AlwaysSkipItemSkipPolicy()).listener(new ListenerReader()).listener(new ListenerProcessor()).listener(new ListenerWriter()).listener(new ListenerChunk()).build();
}
/*...*/
例如,像这样的 ListenerReader:
@Log4j2
public class ListenerReader implements ItemReadListener<T> {
@Value("#{jobExecution.executionContext}")
private ExecutionContext executionContext;
@Override
public void afterRead(T item) {
Integer read = (Integer) executionContext.get("reportRead");
read++;
executionContext.put("reportRead", read);
}
@Override
public void onReadError(Exception ex) {
Integer error = (Integer) executionContext.get("reportError");
error++;
executionContext.put("reportError", error);
}
}
但是在 ListenerReader 中,我看不到 executionContext 字段。我该如何解决?
解决方案
你可以这样做
- 使用 JobScope 定义 Bean
- 像往常一样在 Step 中使用它
- 通过监听器注入它。
下面是一个例子
@Bean
@JobScope
public SimpleReaderListener simpleReaderListener() {
return new SimpleReaderListener();
}
@Bean
public Step step1() {
return stepBuilderFactory.get("step1").<SoccerTeam, SoccerTeam> chunk(1)
.reader(simpleReader()).listener(simpleReaderListener()).processor(new SimpleProcessor())
.writer(new SimpleWriter()).build();
}
public class SimpleReaderListener implements ItemReadListener<SoccerTeam> {
@Value("#{jobExecution.executionContext}")
private ExecutionContext executionContext;
@Override
public void afterRead(SoccerTeam soccerTeam) {
}
推荐阅读
- android - 如果 renderscriptTargetApi > 20,渲染脚本不会生成 librs.xx.so
- firebase - Cloud Functions:函数工作者因退出代码而崩溃:3
- r - 向 y 轴标签添加百分比
- linq - 如何使用复杂查询声明 System.Linq.IQueryable 变量
- c++ - 在 Qt 中设置 pixmap 时的奇怪执行时间
- javascript - 如何使用 forEach() 方法遍历对象数组?
- ios - 将 CIImage 坐标从 CIFaceFeature 转换为 CGRect
- sql - 当我只有一周中的某一天时,获取天数
- reactjs - 如何在反应中将参数传递给状态回调函数
- angular - 创建嵌套的自定义 Angular Web 组件