Spring Batch - 使用异步作业检索异常

问题描述 投票:0回答:2

我正在使用异步 JobLauncher 在 Spring Batch 中配置一个(长时间运行的)作业,并且我有两个 REST 端点:

  1. /start --> 将异步启动作业并将 job_execution_id 返回给客户端
  2. /status/{job_execution_id} --> 将根据存储在 JobExecutionContext 中的数据返回作业执行的状态

在 /status 端点,我想通知客户端过程中发生的任何异常。 但是,我无法像使用同一作业的同步版本那样检索它们:

   jobExecution.getAllFailureExceptions() --> empty list
   stepExecution.getFailureExceptions()  --> empty list

有没有办法告诉 Spring Batch 存储异常堆栈跟踪(或至少是异常消息),以便我以后可以检索它?

谢谢 朱利奥

spring asynchronous spring-batch
2个回答
1
投票

失败异常在作业执行完成后添加(更准确地说是就在作业即将完成之前)。因此在作业运行时它们不可用。这就是为什么当作业在后台异步运行时调用

/status
端点无法获取它们的原因。

这同样适用于步骤失败异常,但是一旦步骤完成,这些异常就应该可用(而最终的后续步骤仍在运行,周围的作业也是如此)。


0
投票

使用 Remote Chunking 时也会发生同样的情况。您无法将 FaultTolerance 与 SkipPolicy 一起使用,管理器配置不会选择侦听器。

对于您的特殊情况,非常遗憾我不得不使用例如:StepExecutionListener 并使用 afterStep 从 ExitStatus 获取 exitDescription。那么最好的解决方案是使用 Worker 并在那里处理异常。

© www.soinside.com 2019 - 2024. All rights reserved.