gpt4 book ai didi

Spring Batch - 验证输入 csv 文件中的标题行,如果文件无效则跳过该文件

转载 作者:行者123 更新时间:2023-12-04 02:47:48 25 4
gpt4 key购买 nike

我有一个简单的工作如下:

<batch:step id="step">
<batch:tasklet>
<batch:chunk reader="itemReader" processor="itemProcessor" writer="itemWriter" commit- interval="5000" />
</batch:tasklet>
</batch:step>

itemReader 如下:

<bean id="itemReader" class="org.springframework.batch.item.file.FlatFileItemReader"
scope="step">
<property name="linesToSkip" value="1"></property>
<property name="skippedLinesCallback" ref="skippedLinesCallback" ></property>

<property name="lineMapper">
<bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
<property name="lineTokenizer" ref="lineTokenizer">
<property name="delimiter" value="," />
</bean>
</property>
<property name="fieldSetMapper">
<bean
class="org.springframework.batch.item.file.mapping.PassThroughFieldSetMapper" />
</property>
</bean>
</property>
<property name="resource" value="#{stepExecutionContext['inputKeyName']}" />
</bean>

<bean id"lineTokenizer" class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">

<bean id="skippedLinesCallback" class="com.test.IteMReaderHeader" >
<property name="lineTokenizer" ref="lineTokenizer">
</bean>

我通过在其中注入(inject)“lineTokenizer”来设置“com.test.IteMReaderHeader”类中输入字段的“名称”。

我需要验证标题行,这是具有固定标题值的输入 csv 文件中的第一行,如果标题行无效,那么在这种情况下,我需要使该步骤失败并跳过整个文件,以便下一个文件可用于读取。

请建议一种合适的实现方式。非常感谢您的宝贵时间和宝贵意见。

谢谢!!

最佳答案

查看FlatFileItemReader文件停止条件管理的代码;

  1. 带有私有(private)字段boolean noInput
  2. 在 protected doRead()中使用私有(private)函数readLine()

恕我直言,最好的解决方案是从您的 skippedLineCallback 中抛出运行时异常,并将错误作为读者耗尽条件进行管理。

以这种方式编写委托(delegate)的示例

class SkippableItemReader<T> implements ItemStreamReader<T> {
private ItemStreamReader<T> flatFileItemReader;
private boolean headerError = false;

void open(ExecutionContext executionContext) throws ItemStreamException {
try {
flatFileItemReader.open(executionContext);
} catch(MyCustomExceptionHeaderErrorException e) {
headerError = true;
}
}

public T read() {
if(headerError)
return null;
return flatFileItemReader.read();
}

// Other functions delegation
}

(当然,您必须手动将委托(delegate)注册为流)
或将 FlatFileItemReader 扩展为

class SkippableItemReader<T> extends FlatFileItemReader<T> {
private boolean headerError = false;

protected void doOpen() throws Exception {
try {
super.doOpen();
} catch(MyCustomExceptionHeaderErrorException e) {
headerError = true;
}
}

protected T doRead() throws Exception {
if(headerError)
return null;
return super.doRead();
}
}

代码是未经测试直接写的,所以可能会有错误,但希望你能理解我的意思。
希望能解决你的问题

关于Spring Batch - 验证输入 csv 文件中的标题行,如果文件无效则跳过该文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18517983/

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