gpt4 book ai didi

java - Spring Boot 批处理 - MultiResourceItemReader : move to next file on error

转载 作者:行者123 更新时间:2023-12-01 11:04:14 24 4
gpt4 key购买 nike

在批处理服务中,我使用 MultiResourceItemReader 读取多个 XML 文件,该文件委托(delegate)给 StaxEventItemReader。

如果读取文件时发生错误(例如解析异常),我想指定 Spring 开始读取下一个匹配文件。例如,使用 @OnReadError 注释和/或 SkipPolicy。

目前,当引发读取异常时,批处理会停止。

有人知道怎么做吗?

编辑:我看到 MultiResourceItemReader 有一个方法 readNextItem(),但它是私有(private)的 -_-

最佳答案

我有一段时间没有使用 SB,但在查看 MultiResourceItemReader 代码时,我想您可以编写自己的 ResourceAwareItemReaderItemStream 包装器,在其中检查设置为移动到的标志下一个文件或使用委托(delegate)执行标准读取。
该标志可以存储到执行上下文或包装器中,并且应该在下一步移动后清除。

class MoveNextReader<T> implements ResourceAwareItemReaderItemStream<T> {
private ResourceAwareItemReaderItemStream delegate;
private boolean skipThisFile = false;

public void setSkipThisFile(boolean value) {
skipThisFile = value;
}

public void setResource(Resource resource) {
skipThisFile = false;
delegate.setResource(resource);
}

public T read() {
if(skipThisFile) {
skipThisFile = false;
// This force MultiResourceItemReader to move to next resource
return null;
}
return delegate.read();
}
}

使用此类作为 MultiResourceItemReader 的委托(delegate),并在 @OnReadError 中注入(inject) MoveNextReader 并设置 MoveNextReader.skipThisFile

我无法自己测试代码,但我希望这是一个很好的起点。

关于java - Spring Boot 批处理 - MultiResourceItemReader : move to next file on error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33107103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com