从步骤

时间:2019-07-14 17:36:43

标签: spring spring-batch batch-processing

我正在通过以下方式定义我的 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 个答案:

答案 0 :(得分:0)

我认为您的配置没有问题。 resourceString的值应为org.springframework.core.io.Resource的数组,因为这是resources的{​​{1}}属性的参数类型。

您可以将数组或列表MultiResourceItemReader与每个资源的绝对路径一起传递,它应该可以工作。这是一个简单的示例:

String

希望这会有所帮助。