无法将类型“java.util.Collections$UnmodifyingMap”的属性值转换为所需类型“org.springframework.batch.item.ExecutionContext”

2024-05-04

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

如果有人遇到过这个问题,分享解决方案会很有帮助,提前致谢。

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;
}

}

错误的堆栈跟踪是:

严重:在作业 XXXBatch 中执行步骤 stepCandidatos 时遇到错误 org.springframework.beans.factory.BeanCreationException:创建类路径资源[spring/batch/jobs/jobXXX.xml]中定义的名为“scopedTarget.Candidatos_itemProcessor”的bean时出错:bean初始化失败;嵌套异常是 org.springframework.beans.ConversionNotSupportedException:无法将属性“stepContext”的类型“java.util.Collections$UnmodifyingMap”的属性值转换为所需类型“org.springframework.batch.item.ExecutionContext”;嵌套异常是 java.lang.IllegalStateException:无法将属性“stepContext”的类型 [java.util.Collections$UnmodifyingMap] 的值转换为所需类型 [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.SimpleBeanTargetSource.getTarget(SimpleBeanTargetSource.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.doInIteration(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.SimpleStepHandler.handleStep(SimpleStepHandler.java:148) 在 org.springframework.batch.core.job.flow.JobFlowExecutor.executeStep(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.SimpleJobLauncher$1.run(SimpleJobLauncher.java:135) 在 org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50) 在 org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:128) 在 com.XXX.Test.run(Test.java:32) 在 com.XXX.Test.main(Test.java:15) 引起:org.springframework.beans.ConversionNotSupportedException:无法将类型“java.util.Collections$UnmodifyingMap”的属性值转换为属性“stepContext”所需的类型“org.springframework.batch.item.ExecutionContext”;嵌套异常是 java.lang.IllegalStateException:无法将属性“stepContext”的类型 [java.util.Collections$UnmodifyingMap] 的值转换为所需类型 [org.springframework.batch.item.ExecutionContext]:找不到匹配的编辑器或转换策略 在org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:474) 在org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:511) 在org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:505) 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1502) 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1461) 在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1197) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) ... 34 更多 原因:java.lang.IllegalStateException:无法将属性“stepContext”的类型 [java.util.Collections$UnmodifyingMap] 的值转换为所需类型 [org.springframework.batch.item.ExecutionContext]:找不到匹配的编辑器或转换策略 在org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:267) 在org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:459) ... 40 更多 2017 年 6 月 28 日上午 9:54:31 org.springframework.batch.core.launch.support.SimpleJobLauncher 运行 信息:作业:[FlowJob:[name=CertSeurBatch]] 已完成,具有以下参数:[{}] 和以下状态:[FAILED]


就我而言,问题是tasklet的配置是

@Bean
@StepScope
public MyTasklet createTasklet(@Value("#{jobExecutionContext}") ExecutionContext executionContext)

解决问题的方法是将其更改为

@Bean
@StepScope
public MyTasklet createTasklet(@Value("#{stepExecution.jobExecution.executionContext}") ExecutionContext executionContext)

这是一个迟到的答案,但希望它对将来的人有所帮助。

使用的 Spring 组件版本:

<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>
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法将类型“java.util.Collections$UnmodifyingMap”的属性值转换为所需类型“org.springframework.batch.item.ExecutionContext” 的相关文章

随机推荐

  • 两列单元格列表(下拉列表) - Google Sheet

    我需要一个两列单元格列表 下拉列表 默认情况下 使用数据验证选项我们只能在单元格列表中看到单列值 但我想从两个不同的列填充列表 请看下面的示例表 Example Table Column A Column B Sr 1 Product On
  • 如何从 Hyperledger Fabric 链码打印和查看日志

    我想在调用链代码中的函数时查看日志 以进行调试 我尝试过这样的事情 var logger shim NewLogger chaincode example02 logger Info get caller data called 我查看了运
  • 如何为高流量网络应用程序实现“保存搜索”功能?

    我想知道可以在 eBay 等大型网络应用程序上找到的 保存的搜索 功能 您可以做的就是保存搜索 例如 宾得镜头 50mm 1 4 每当有人出售符合搜索条件的新优质标准快速宾得镜头时 您都会收到通知 对我来说 实现此类功能并不是一件简单的事情
  • Typescript,自动等待所有 Promise 返回函数调用

    我正在使用 async 函数 有时我忘记为内部调用添加 await async function doThreeSteps gt await firstPromiseReturningFunc nonAsyncFunction second
  • MediaPlayer.setDataSource(String) 不适用于本地文件

    如果我使用静态方法 MediaPlayer create context id 我可以播放本地 mp3 但如果我使用非静态方法 MediaPlayer setDataSource String 它就不起作用 发生的情况是 当我调用 Medi
  • 如何在 JPQL 语句中使用类型转换?

    我有两个Integer数据库中的列 derby 和 db2 我需要将它们彼此分开JPQL 两列都是类型Integer如果余数是十进制数 则返回零 例如0 25变成0等等 这是可以理解的 因为类型是 int In SQL例如我可以有这个 se
  • matplotlib 绘图,然后等待原始输入

    我正在尝试打开一系列 png 图 我希望能够在屏幕上查看绘图 然后收到提示 等待我 按 Enter 按回车键后 应显示下一个图 我见过很多类似的问题 Matplotlib 强制绘图显示然后返回主代码 https stackoverflow
  • iPhone 上的 Flash(或 Silverlight)

    我对在 iPhone 上开发应用程序感兴趣 并且作为一名 NET 和 ActionScript 开发人员 我对 Objective C Cocoa Touch 编程的学习曲线有点害怕 我知道 Adob e 已经为 iPhone 准备好了 F
  • 需要帮助在 D3.js 条形图中将 x 轴刻度与条形对齐

    我有一个可用的线性条形图D3 js http d3js org 它也有基于时间的 x 轴 条形图绑定到计数属性 而轴绑定到日期属性 轴上的刻度未与条形对齐 知道如何将它们两者排列起来吗 这是 jsFiddle http jsfiddle n
  • git log over 使用 --follow 时限制输出? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 在以下服务
  • 实现github.com文件无缝文件导航

    我刚刚在浏览 github 存储库时注意到最近的变化 当您选择文件或文件夹时 新文件会滑入并推出旧文件 使用 jquery 很容易做到这一点 但真正不同的是 URL 本身实际上发生了变化 因此书签仍然有效 我一直在努力为我正在开发的图书导航
  • C# - 当站点上没有活动时,Quartz 调度程序停止运行

    我用quartz调度器创建了asp net站点 该作业正在后台运行 站点上没有其他活动 Quartz 调度程序每 30 分钟调度一次 IIS启动后 Scheduler运行正常 但一段时间后 Scheduler 停止运行 大约 1 小时 如果
  • 水平滚动卡片,在颤动中具有捕捉效果

    我想创建一个水平滚动的卡片列表 从左或右滑动时具有捕捉到的效果 每张卡片之间都有一定的间距 适合屏幕 如下图所示 除此之外 这些水平可滚动列表元素应包含在垂直可滚动列表内 我所能实现的只是在遵循 flutter 文档中的示例之后显示水平滚动
  • 如何在 Rails 中两次加入相同的 2 个模型?

    我有一个带有国家 地区首选项的应用程序 用户将有两种类型的国家偏好 事件和研究 未来可能还会有更多 我更倾向于使用 2 个表来表示这一点 而不是使用 STI 我在优雅地配置 Rails 来执行此操作时遇到了一些麻烦 我可以破解它 但我宁愿按
  • 我可以在 Ruby 的 if/else 中使用大括号吗?

    为什么我不能在中使用大括号if else结构体 我离开了 Python 因为我对仔细缩进语句感到不舒服 Ruby 中也是这样吗 例如 我可以写这样的东西吗 if token hello puts hello encountered lots
  • 托管 C++ 和 AnyCPU

    我有一个托管 C dll 我从 C 项目中引用它 C 项目将被编译为 AnyCPU 有没有办法编译 32 位和 64 位版本的托管 C dll 然后告诉 C 项目在运行时根据正在运行的体系结构加载正确的版本 让 AnyCPU dll 与 C
  • 在 Products.scala 中找不到 flash

    我目前正在阅读 Peter Hilton 的 Play for Scala 我刚刚结束了第一个示例 Play 应用程序 您可以在其中构建回形针目录 然而 在编译时 我收到一个编译错误 告诉我尚未找到值 flash 通常这是我犯的一个简单错误
  • 在Python中将一个方法(带参数)传递给另一个方法的最佳方法是什么

    将方法和方法参数传递给另一个方法的最佳方法是什么 有更好的方法来执行以下操作吗 def method1 name return Hello name def method2 methodToCall methodToCallParams q
  • 使用 Android 应用程序将条目发布到 SQL Server

    我是一个真正的新手 如果这个问题听起来很愚蠢 我提前道歉 我正在尝试创建一个应用程序 允许我将客户数据发布到 Windows 服务器上的 SQL Server 这可能吗 如果是这样 我需要什么 再次感谢您的帮助 如果这是一个愚蠢的问题 我再
  • 无法将类型“java.util.Collections$UnmodifyingMap”的属性值转换为所需类型“org.springframework.batch.item.ExecutionContext”

    当我尝试使用 StepExecutionContext 在步骤之间共享数据时 出现此错误 我对这个框架非常菜鸟 所以我希望这是一个简单的问题 但据我所知 它必须在框架上 因为我不在任何地方使用 UnmodifyingMap 如果有人遇到过这