[英]Spring Batch - Recovery after Error
我有一个带有ItemProcessor
的Spring Batch作业,可能会因Exception而失败。 如果发生这种情况,我将拥有一个处理恢复的ItemProcessListener
(将项目标记为失败,以便在下次运行中不会将其拾取)。
该解决方案的工作原理类似于“常规”异常,但是我遇到了java.lang.OutOfMemoryError: Java heap space
最近发生错误,其中未调用onProcessError()
并且在下次运行中将不排除该项目。
但是,我注意到调用了JobExecutionListener.afterJob()
,在这里我可以获取失败执行的作业参数,并再次查询该执行的所有项目并将它们标记为失败。
有没有更好的方法来解决我的问题?
基本上onProcessError
是名字不正确的。 它仅侦听Exception
,而不侦听Error
。 Java强烈建议您不要通过catch块来处理Error
。 原因是,jvm通过Error
发出故障,该故障不是在编程中而是在vm的配置中。 应该将它们作为一个有力的指标,您的虚拟机设置需要更正。
在您的情况下,您将编写一个OutOfMemoryError
,如果您的内存需求高于已通过-Xmx / Xms startparameters分配给Java作业的内存,则会发生该OutOfMemoryError
。 您要么分配了很少的内存,要么消耗了太多内存。 这应该是固定的,不能通过某些技术技巧来解决。
首先,您应该找出导致此错误的原因。 也许您只需要分配更多的内存,可能您的某些算法在内存消耗方面过于贪婪,而且并非不可能,您将内存泄漏作为根本原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.