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']
尝试注释掉其他表达式,并一一找出哪个不工作。
另一种方法是创建自己的类并注入jobParameters
、jobExecutionContext
和其他...
但请注意 - 它应该是一个范围 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 批处理错误中索引到空值
HstSiteConfigurer:ComponentManager初始化失败
错误 org.springframework.web.servlet.DispatcherServlet - 上下文初始化失败