我将按以下方式定义我的MultiResourceItemReader:
<bean id="multiDataItemReader" class="org.springframework.batch.item.file.MultiResourceItemReader" scope="step">
<property name="resources" value="#{jobExecutionContext['filesResource']}"/>
<property name="delegate" ref="dataItemReader"/>
</bean>
您可以看到,我希望从jobExecutionContext读取“filesResource”值。
注:我改变了一些名字,以保持“代码隐私”。这是执行,是有人想要更多的信息请告诉我。
我在第一步中保存了这个值,在第二步中使用了读取器,我应该访问它吗?
我将它保存在step1任务的最后几行中:
ExecutionContext jobContext = context.getStepContext().getStepExecution().getJobExecution().getExecutionContext();
jobContext.put("filesResource", resourceString);
<batch:job id="myJob">
<batch:step id="step1" next="step2">
<batch:tasklet ref="moveFilesFromTasklet" />
</batch:step>
<batch:step id="step2">
<tasklet>
<chunk commit-interval="500"
reader="multiDataItemReader"
processor="dataItemProcessor"
writer="dataItemWriter" />
</tasklet>
</batch:step>
</batch:job>
我不确定我忘记了什么来得到这个值。我得到的错误是:
20190714 19:49:08.120 WARN org.springframework.batch.item.file.MultiResourceItemReader [[ # ]] - No resources to read. Set strict=true if this should be an error condition.
1条答案
按热度按时间yeotifhr1#
我看不出你的配置有什么问题。
resourceString
的值应该是org.springframework.core.io.Resource
的数组,因为这是MultiResourceItemReader
的resources
属性的参数类型。你可以传递一个
String
的数组或列表,并带有每个资源的绝对路径,它应该可以工作。