我找不到在异步上下文中处理spring-batch异常的正确方法。异步TaskManager处理作业/步异常
当我将ThreadPoolTaskManager设置到我的JobLauncher时,真正的作业/步骤异常不再被记录下来。相反,日志将是这样的:
org.springframework.batch.core.JobInterruptedException: Job interrupted by step execution
at org.springframework.batch.core.job.SimpleStepHandler.handleStep(SimpleStepHandler.java:165)
at ...
我试图解决这个添加JobExecutionListener这样的:
@Override
public void afterJob(JobExecution jobExecution) {
List<Throwable> jobExceptions = jobExecution.getFailureExceptions();
if (CollectionUtils.isNotEmpty(jobExceptions)) {
Throwable lastJobException = jobExceptions.get(jobExceptions.size() - 1);
LOGGER.error("Spring-Batch error at job level", lastJobException);
String lastJobExceptionMessage = ExceptionUtils.getRootCauseMessage(lastJobException);
// storing message in ExecutionContext for the batch-admin webapp
String message = "";
if (jobExecution.getExecutionContext().get(Consts.JOB_EXECUTION_MESSAGE_KEY) != null) {
message = jobExecution.getExecutionContext().getString(Consts.JOB_EXECUTION_MESSAGE_KEY);
}
message += "\n" + lastJobExceptionMessage;
jobExecution.getExecutionContext().put(Consts.JOB_EXECUTION_MESSAGE_KEY, message);
}
}
但我仍然有JobInterruptedException结束。 有没有一种方法来检索中断的最初原因(可能是在阅读器/处理器/写器的代码错误?
感谢,
西里尔
好,谢谢,所以让我重新说说我的问题:可能是我的工作/步骤在异步情况下获得STOPPED的原因是什么?以及如何查找并记录该原因 –
@CyrilDejonghe我不知道。尝试在'StepExecution :: setStatus'中放置一个断点,并观察值为'STOPPED'或'STOPPING'的时间。 – Artefacto
我试图调试更多细节,但我被困在Spring-Batch的最深处。例如,我在[RepeatTempalte#doHandle()](https://jira.spring.io/browse/BATCH-2479)中遇到了NullPointerException ...我可能会问一个关于配置Async JobLauncher的更通用的问题,但是文档似乎很清楚...... –