Spring Batch:吞噬OutOfMemoryError

时间:2014-09-19 15:08:02

标签: multithreading exception-handling out-of-memory spring-batch fail-fast

作为更大的应用程序的一部分,我设置了一个Spring Batch作业,它只由一个面向块的tasklet组成:读者,处理器和编写器。作业不在主线程中运行。

有时,tasklet代码会抛出OutOfMemoryError。因此,我设置线程的UncaughtExceptionHandler以便能够对这些错误做出反应,只需终止应用程序。

但OutOfMemoryError永远不会到达线程的UncaughtExceptionHandler。我会说OutOfMemoryError被“吞噬”,可能是由AbstractStep,即使我不确定。 RepeatTemplate肯定是一个角色。它可以通知一些RepeatListeners有关OutOfMemoryError的信息,但默认情况下没有注册任何监听器,似乎无法通过任务定义中的通常标记注册任何监听器。

无论如何,即使在OutOfMemoryError之后,JVM也会继续运行,因为吞下了OoME。这并不好,因为它没有明确表明应用程序实际崩溃了。

那么,您对如何阻止Spring Batch吞下这种错误并有可能处理它们有什么建议吗?

显然我们也在修复OoME,但我认为如果JVM在出现错误时会崩溃,那将是安全的。

我正在使用Spring Batch 3.0.1。

0 个答案:

没有答案