这是我的实现,我想打印作业名称或步骤名称以及错误消息。 我该怎么做?
public class WriterListener implements ItemWriteListener {
private static final PlatformLogger logger = PlatformLogger.getLogger(WriterListener.class);
@Override
public void beforeWrite(List list) {
}
@Override
public void afterWrite(List list) {
}
@Override
public void onWriteError(Exception e, List list) {
logger.error("Exception occurred while writing {}", Arrays.toString(list.toArray()), e);
}
}
您可以使用步骤范围侦听器并在其中注入作业/步骤名称。这是一个简单的例子:
public class WriterListener implements ItemWriteListener {
private static final PlatformLogger logger = PlatformLogger.getLogger(WriterListener.class);
private String stepName;
public WriterListener(String stepName) {
stepName = stepName;
}
@Override
public void beforeWrite(List list) {
}
@Override
public void afterWrite(List list) {
}
@Override
public void onWriteError(Exception e, List list) {
// use this.stepName in the log message here
logger.error("Exception occurred while writing {}", Arrays.toString(list.toArray()), e);
}
}
您可以将侦听器声明为作用域 bean,如下所示:
@Bean
@StepScope
public WriterListener writerListener(@Value("#{stepExecution.stepName}") String stepName) {
return new WriterListener(stepName);
}
完成此操作后,您可以在步骤中注册监听器,如下所示:
@Bean
public Job job(JobBuilderFactory jobs, StepBuilderFactory steps) {
return jobs.get("job")
.start(steps.get("step")
.<Integer, Integer>chunk(5)
.reader(itemReader())
.processor(itemProcessor())
.writer(itemWriter())
.listener(writerListener(null))
.build())
.build();
}