bean 的初始化失败 SpelEvaluationException: EL1012E: 无法在 spring 批处理错误中索引到空值

Posted

技术标签:

【中文标题】bean 的初始化失败 SpelEvaluationException: EL1012E: 无法在 spring 批处理错误中索引到空值【英文标题】:Initialization of bean failed SpelEvaluationException: EL1012E: Cannot index into a null value in spring batch Error 【发布时间】:2020-01-17 10:10:25 【问题描述】:

创建名为“scopedTarget.data.migrator.nameWriter”的 bean 时出错

所以我们从数据库中获取记录,对于这个查询,我们有 100000 条记录。 我们使用 Spring Batch 从数据库中获取 5 条记录的记录。

基本上我们能够很好地读取进程记录,但是在写入 bean 时,初始化失败并出现以下错误

这是堆栈跟踪

这是我的编写器配置

有时我没有收到此错误,但大多数时候我收到此错误。 无法找到此错误的确切位置。

请推荐

【问题讨论】:

什么是transientJobExecutionContext @LucaBassoRicci 它只是一个映射<util:map id="transientJobExecutionContext" key-type="java.lang.String" map-class="java.util.HashMap" value-type="java.util.HashMap"/> 您确定jobParameters['sourceRootGroupId'] 始终不被解析为null 值吗? p:sourceRootGroupId 被解析为非空值? @LucaBassoRicci 我只能在代码中看到..让我再检查一下。我该如何确认? abc.efg.data.migrator.service.core.writer.NameItemWriter.setSourceRootGroupId 中放置断点或在程序执行期间检查transientJobExecutionContext 是否存在空值 【参考方案1】:

我打赌问题在于以下表达式:

#transientJobExecutionContext[jobParameters['sourceRootGroupId']]['nameIds']

尝试注释掉其他表达式,并一一找出哪个不工作。 另一种方法是创建自己的类并注入jobParametersjobExecutionContext 和其他...

但请注意 - 它应该是一个范围 bean 来访问这些。 https://docs.spring.io/spring-batch/docs/current-SNAPSHOT/reference/html/step.html#step-scope

【讨论】:

以上是关于bean 的初始化失败 SpelEvaluationException: EL1012E: 无法在 spring 批处理错误中索引到空值的主要内容,如果未能解决你的问题,请参考以下文章

上下文初始化失败:org.springframework.beans.factory.BeanDefinitionStoreException

bean 的初始化失败 SpelEvaluationException: EL1012E: 无法在 spring 批处理错误中索引到空值

zookeeper断开 怎么办

HstSiteConfigurer:ComponentManager初始化失败

严重:调度程序初始化失败无法加载配置

错误 org.springframework.web.servlet.DispatcherServlet - 上下文初始化失败