Spring batch 无法转换类型为';Collections$UnmodifiableMap';至所需类型';org.springframework.batch.item.ExecutionContext';

Spring batch 无法转换类型为';Collections$UnmodifiableMap';至所需类型';org.springframework.batch.item.ExecutionContext';,spring-batch,Spring Batch,当我尝试使用StepExecutionContext在步骤之间共享数据时,出现了这个错误。我对这个框架非常在行,所以我希望这是一个简单的问题,但据我所知,它必须在框架上,因为我没有在任何地方使用“不可修改的地图” 如果有人遇到这种情况,分享解决方案会有很大帮助,提前谢谢 bean的定义如下: <bean id="Candidatos_itemProcessor" class="com.xxx.CandidatoProcessorTest" scope="step"> <prop

当我尝试使用StepExecutionContext在步骤之间共享数据时,出现了这个错误。我对这个框架非常在行,所以我希望这是一个简单的问题,但据我所知,它必须在框架上,因为我没有在任何地方使用“不可修改的地图”

如果有人遇到这种情况,分享解决方案会有很大帮助,提前谢谢

bean的定义如下:

<bean id="Candidatos_itemProcessor" class="com.xxx.CandidatoProcessorTest" scope="step">
<property name="stepContext" value="#{stepExecutionContext}"/>

处理器的实现是:

public class CandidatoProcessorTest implements ItemProcessor<Candidato, Candidato> {

private ExecutionContext stepContext = null;
//other private xxx

public Candidato process(Candidato item) throws Exception {

    //some logic here
        stepContext.put("cod_situacion", cod_situacion);
        stepContext.put("des_situacion", des_situacion);
        stepContext.put("fec_situacion", fec_situacion);
    //other logic
    return item;
}

//a private aux method

public void setStepContext(ExecutionContext stepContext) {
    this.stepContext = stepContext;
}
公共类CandidateProcessorTest实现ItemProcessor{
private ExecutionContext stepContext=null;
//其他私人xxx
公共候选进程(候选项)引发异常{
//这里有些逻辑
stepContext.put(“cod_situacion”,cod_situacion);
stepContext.put(“des_situacion”,des_situacion);
stepContext.put(“fec_situacion”,fec_situacion);
//其他逻辑
退货项目;
}
//一种私有aux方法
public void setStepContext(ExecutionContext stepContext){
this.stepContext=stepContext;
}
}

错误的堆栈跟踪是:

严重:在作业XXXBatch中执行步骤StepCandidates时遇到错误 org.springframework.beans.factory.BeanCreationException:创建名为“scopedTarget.Candidates_itemProcessor”的bean时出错,该bean在类路径资源[spring/batch/jobs/jobXXX.xml]中定义:初始化bean失败;嵌套异常为org.springframework.beans.ConversionNotSupportedException:未能将类型为“java.util.Collections$UnmodifiableMap”的属性值转换为属性“stepContext”所需的类型“org.springframework.batch.item.ExecutionContext”;嵌套异常为java.lang.IllegalStateException:无法将[java.util.Collections$UnmodifiableMap]类型的值转换为属性“stepContext”所需的类型[org.springframework.batch.item.ExecutionContext]:未找到匹配的编辑器或转换策略 位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:547) 位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) 位于org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:343) 位于org.springframework.batch.core.scope.StepScope.get(StepScope.java:113) 位于org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:338) 位于org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195) 位于org.springframework.aop.target.SimpleBanTargetSource.getTarget(SimpleBanTargetSource.java:35) 位于org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:187) 位于com.sun.proxy.$Proxy23.process(未知源) 位于org.springframework.batch.core.step.item.SimpleChunkProcessor.doProcess(SimpleChunkProcessor.java:126) 位于org.springframework.batch.core.step.item.SimpleChunkProcessor.transform(SimpleChunkProcessor.java:293) 位于org.springframework.batch.core.step.item.SimpleChunkProcessor.process(SimpleChunkProcessor.java:192) 位于org.springframework.batch.core.step.item.ChunkOrientedTasklet.execute(ChunkOrientedTasklet.java:75) 位于org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:406) 位于org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:330) 位于org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133) 位于org.springframework.batch.core.step.tasklet.TaskletStep$2.doInChunkContext(TaskletStep.java:271) 位于org.springframework.batch.core.scope.context.StepContextRepeatCallback.doInitation(StepContextRepeatCallback.java:81) 位于org.springframework.batch.repeat.support.RepeatTemplate.getNextResult(RepeatTemplate.java:374) 位于org.springframework.batch.repeat.support.RepeatTemplate.executeInternal(RepeatTemplate.java:215) 位于org.springframework.batch.repeat.support.RepeatTemplate.iterate(RepeatTemplate.java:144) 位于org.springframework.batch.core.step.tasklet.TaskletStep.doExecute(TaskletStep.java:257) 位于org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:200) 位于org.springframework.batch.core.job.simplestphandler.handleStep(simplestphandler.java:148) 位于org.springframework.batch.core.job.flow.JobFlowExecutor.ExecuteTEP(JobFlowExecutor.java:64) 位于org.springframework.batch.core.job.flow.support.state.StepState.handle(StepState.java:67) 位于org.springframework.batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:169) 位于org.springframework.batch.core.job.flow.support.SimpleFlow.start(SimpleFlow.java:144) 位于org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:134) 位于org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:306) 位于org.springframework.batch.core.launch.support.simplejoblancher$1.run(simplejoblancher.java:135) 位于org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50) 位于org.springframework.batch.core.launch.support.simplejoblancher.run(simplejoblancher.java:128) 在com.XXX.Test.run(Test.java:32) 位于com.XXX.Test.main(Test.java:15) 原因:org.springframework.beans.ConversionNotSupportedException:未能将类型为“java.util.Collections$UnmodifiableMap”的属性值转换为属性“stepContext”所需的类型“org.springframework.batch.item.ExecutionContext”;嵌套异常为java.lang.IllegalStateException:无法将[java.util.Collections$UnmodifiableMap]类型的值转换为所需类型[org.sp]
@Bean
@StepScope
public MyTasklet createTasklet(@Value("#{jobExecutionContext}") ExecutionContext executionContext)
@Bean
@StepScope
public MyTasklet createTasklet(@Value("#{stepExecution.jobExecution.executionContext}") ExecutionContext executionContext)
<springframework.version>5.2.12.RELEASE</springframework.version>
<spring-integration.version>5.3.4.RELEASE</spring-integration.version>
<spring-batch-admin.version>1.3.1.RELEASE</spring-batch-admin.version>
<spring-batch.version>4.2.5.RELEASE</spring-batch.version>