【问题标题】:MultiResourceItemReader finish processing file eventMultiResourceItemReader 完成处理文件事件
【发布时间】:2014-12-30 16:53:39
【问题描述】:

我如何知道某个步骤何时完成处理(使用了处理器)文件中的所有行? (MultiResourceItemReader = 多个文件)

我做了这个:

@CommonsLog
public class MultiResourceItemReaderWrapper<T> extends MultiResourceItemReader<T> {

    private List<URI> processedResources = new ArrayList<URI>();

    @Override
    public void setResources(Resource[] resources) {
        super.setResources(resources);
        for (Resource resource : resources) {
            log.info("Resource found to be read: " + resource);
            try {
                processedResources.add(resource.getURI());
            } catch (IOException e) {
                log.error(e);
            }
        }
    }

    @AfterStep
    public void afterStep(StepExecution stepExecution) {
        stepExecution.getExecutionContext().put("MultiResourceItemReaderWrapper.processedResources", processedResources);
    }

}

在以后的步骤中,我想归档这些文件(移动/重命名)。

我不知道是否是最好的方法。但是用这种方法,我不知道一个文件是否已经处理没有错误(我只想归档处理没有错误的文件)?

你能帮帮我吗?

【问题讨论】:

    标签: spring batch-processing spring-batch


    【解决方案1】:

    在您的域对象中使用ResourceAware 接口;读取会将当前资源名称设置为读取项,您可以检查文件更改。

    【讨论】:

    • 在我的例子中不是 URI 吗?
    • 不要使用自定义阅读器,而是使用标准阅读器并在检查资源更改时存储已处理的资源。
    • 好的,但是您如何以及在哪里存储它们?你有例子吗?
    • 进入执行上下文,就像您在示例中所做的那样。
    • 好的,但是如何在托管 bean 之外访问 StepExecution(在这种情况下,我使用注释方法 @AfterStep 与我的自定义类)?在 @Bean 注释的方法中,在 bean 实例化期间不会注入 StepExecution。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多