我找不到在異步上下文中處理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的更通用的問題,但是文檔似乎很清楚...... –