- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我找不到在异步上下文中处理 spring-batch 异常的正确方法。
当我将 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
结束。有没有办法检索中断的初始原因(可能是读取器/处理器/写入器代码中的错误?
最佳答案
我认为你的诊断不正确。仅在 SimpleStepHandler
中抛出该异常并附带该错误消息:
if (currentStepExecution.getStatus() == BatchStatus.STOPPING
|| currentStepExecution.getStatus() == BatchStatus.STOPPED) {
// Ensure that the job gets the message that it is stopping
execution.setStatus(BatchStatus.STOPPING);
throw new JobInterruptedException("Job interrupted by step execution");
}
并且仅当该步骤本身没有抛出JobInterruptedException
时。发生这种情况的最明显的情况是作业停止。请参阅this example ,其输出以
INFO: Executing step: [step1]Feb 24, 2016 1:25:02 PM org.springframework.batch.core.repository.support.SimpleJobRepository checkForInterruptionINFO: Parent JobExecution is stopped, so passing message on to StepExecutionFeb 24, 2016 1:25:02 PM org.springframework.batch.core.step.ThreadStepInterruptionPolicy isInterruptedINFO: Step interrupted through StepExecutionFeb 24, 2016 1:25:02 PM org.springframework.batch.core.step.AbstractStep executeINFO: Encountered interruption executing step step1 in job myJob : Job interrupted status detected.Feb 24, 2016 1:25:02 PM org.springframework.batch.core.repository.support.SimpleJobRepository checkForInterruptionINFO: Parent JobExecution is stopped, so passing message on to StepExecutionFeb 24, 2016 1:25:02 PM org.springframework.batch.core.job.AbstractJob executeINFO: Encountered interruption executing job: Job interrupted by step executionFeb 24, 2016 1:25:02 PM org.springframework.batch.core.launch.support.SimpleJobLauncher$1 runINFO: Job: [SimpleJob: [name=myJob]] completed with the following parameters: [{}] and the following status: [STOPPED]Status is: STOPPED
This other example表明使用线程池时抛出异常不会改变任何事情。最终输出为
INFO: Executing step: [step1]Feb 24, 2016 1:28:44 PM org.springframework.batch.core.step.AbstractStep executeSEVERE: Encountered an error executing step step1 in job myJobjava.lang.RuntimeException: My exception at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)(...)Feb 24, 2016 1:28:44 PM org.springframework.batch.core.launch.support.SimpleJobLauncher$1 runINFO: Job: [SimpleJob: [name=myJob]] completed with the following parameters: [{}] and the following status: [FAILED]Status is: FAILED, job execution id 0 #1 step1 FAILEDStep step1java.lang.RuntimeException: My exception at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)(...)
关于java - 使用异步 TaskManager 处理作业/步骤异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35600278/
我正在运行 Flink 应用程序(通过 Yarn),似乎有时任务管理器会随机超时,这是错误: java.util.concurrent.TimeoutException: Heartbeat of T
在网上搜索了一段时间后,我决定向您寻求帮助来解决我的问题。 我的程序应该分析日志文件,日志文件非常大。它们的大小约为 100mb 至 2gb。我想使用 NIO 类(如 FileChannel)读取文件
我找不到在异步上下文中处理 spring-batch 异常的正确方法。 当我将 ThreadPoolTaskManager 设置为我的 JobLauncher 时,不再记录真正的作业/步骤异常。相
我已经将 Flink 配置为 HA 模式,如上所述 here : 我想测试容错能力,因此我做了以下操作: 设置具有 2 个 JobManager 和 1 个 TaskManager 的 Flink 集
我正在测试 Flink 1.3.0 中的弹性功能。我有一份启用检查点和固定延迟重启策略的工作。当我终止其中一个 TaskManager JVM 时,一段时间后作业会在剩余节点上正确重新启动。但是,当我
我在 Windows 10 中有一个程序,它根据程序的状态在系统托盘上显示各种图标。 这通常是通过调用 windows api - Shell_NotifyIcon 来完成的 Shell_Notify
这是我非常想要的快照! 我正在尝试用 java 开发一个程序,它可以在任务栏中获取所有打开的应用程序。我尝试了很多链接,但没有一个对我有帮助。 Ganesh Rangarajan in July 20
我正在开发 Kiosk 应用程序,我需要禁用任务管理器。这样当用户按下 [Ctrl + Alt + Del] 和 [Ctrl + Shift + Escape] 时,任务管理器不应该弹出。怎么办? 最
我正在编写一个透明的 WinForms 应用程序,我想隐藏该应用程序,使其不显示在任务管理器的应用程序选项卡中。我同意它会显示在流程中(事实上它应该)。如果我设置: this.ShowInTaskba
我正在 Android 任务管理器上创建一个项目,就像 Windows 任务管理器一样。如何获取CPU使用率和内存使用率? 最佳答案 您将需要使用 Linux 命令,例如 top 或 ps,方法是:
我正在创建一个需要密码才能退出的应用程序。 所以我禁用了关闭按钮并从任务栏中删除。 我还可以从 TaskManager 应用程序选项卡中删除。但是当我在 TaskManagers Processes
首先我在独立模式下运行! 我一直试图找到任何配置,但我还没有找到任何相关信息。 在 Spark 中有一些配置可以让你限制在每个从属中使用的 CPU 数量: SPARK_WORKER_CORES(工作人
我正在Flink上运行实时流程序,有1个master和2个worker。一名工作人员在单独的计算机上运行,而另一名工作人员在主机本身上运行。我正在使用我的程序的 JAR,其中 Parallelis
我在将 Activity 调到最前面时遇到了问题。 当应用启动时,用户设置一些时间( Activity 1) 现在应用显示倒计时,时间在减少( Activity 2) 现在我按下主页按钮。 选择任务管
我最近在 .net 应用程序上运行了不同的测试,以了解如何减少内存占用。我遇到了各种提示/指南,例如处理非托管资源、取消注册事件、在 xaml 资源上使用 FREEZE 等,这些都是有道理的。大部分事
我需要在我的程序中设置一个值列表,并在所有任务管理器中访问它们。目前,我在主类中声明了一个公共(public)字段并设置了值。稍后在我的程序中,它将在远程集群中运行,我想在所有任务管理器中访问这个变量
我正在使用 Amazon EMR 在 YARN 上运行 Flink 集群。我的设置包括用于 1 个主节点和 2 个核心节点的 m4.large 实例。我已经使用以下命令在 YARN 上启动了 Flin
我使用以下内容通过 Powershell 在 Sharepoint 中设置/更新多用户字段: [Microsoft.SharePoint.SPFieldUserValueCollection]$lot
我使用以下内容通过 Powershell 在 Sharepoint 中设置/更新多用户字段: [Microsoft.SharePoint.SPFieldUserValueCollection]$lot
简单的工作:kafka->flatmap->reduce->map。 作业运行正常,默认值为 taskmanager.heap.mb (512Mb)。根据docs : 此值应尽可能大。由于有问题的机器
我是一名优秀的程序员,十分优秀!