gpt4 book ai didi

spring - 如何使用FlatFileItemReader和 block 跳过CSV中的空白行

转载 作者:行者123 更新时间:2023-12-03 16:40:38 24 4
gpt4 key购买 nike

我正在使用FlatFileItemReader处理CSV文件。

有时我在输入文件中出现空白行。

当发生这种情况时,整个步骤将停止。我想跳过这些行,然后正常进行。

我试图将异​​常处理程序添加到步骤中,以便捕获执行,而不是弯腰整个步骤:

@Bean
public Step processSnidUploadedFileStep() {
return stepBuilderFactory.get("processSnidFileStep")
.<MyDTO, MyDTO>chunk(numOfProcessingChunksPerFile)
.reader(snidFileReader(OVERRIDDEN_BY_EXPRESSION))
.processor(manualUploadAsyncItemProcessor())
.writer(manualUploadAsyncItemWriter())
.listener(logProcessListener)
.throttleLimit(20)
.taskExecutor(infrastructureConfigurationConfig.taskJobExecutor())
.exceptionHandler((context, throwable) -> logger.error("Skipping record on file. cause="+ ((FlatFileParseException)throwable).getCause()))
.build();
}

由于我正在处理 ,当空行到达并且捕获到异常时,发生的事情是整个块被 跳过了(该块可能包含CSV文件上的有效行,它们也被跳过了)

知道在处理文件块时如何正确执行此操作吗?

谢谢,
射线。

编辑完我的代码后。仍然不跳过:
public Step processSnidUploadedFileStep() {
SimpleStepBuilder<MyDTO, MyDTO> builder = new SimpleStepBuilder<MyDTO, MyDTO>(stepBuilderFactory.get("processSnidFileStep"));
return builder
.<PushItemDTO, PushItemDTO>chunk(numOfProcessingChunksPerFile)
.faultTolerant().skip(FlatFileParseException.class)
.reader(snidFileReader(OVERRIDDEN_BY_EXPRESSION))
.processor(manualUploadAsyncItemProcessor())
.writer(manualUploadAsyncItemWriter())
.listener(logProcessListener)
.throttleLimit(20)
.taskExecutor(infrastructureConfigurationConfig.taskJobExecutor())
.build();
}

最佳答案

我们创建了自定义的SimpleRecordSeparatorPolicy,它告诉读者跳过空白行。这样一来,我们读取了100条记录,即3条空白行,这些行均被无视忽略,并写入97条记录。

这是代码:

package com.my.package;

import org.springframework.batch.item.file.separator.SimpleRecordSeparatorPolicy;

public class BlankLineRecordSeparatorPolicy extends SimpleRecordSeparatorPolicy {

@Override
public boolean isEndOfRecord(final String line) {
return line.trim().length() != 0 && super.isEndOfRecord(line);
}

@Override
public String postProcess(final String record) {
if (record == null || record.trim().length() == 0) {
return null;
}
return super.postProcess(record);
}

}

这是读者:
package com.my.package;

import org.springframework.batch.core.configuration.annotation.StepScope;
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.mapping.DefaultLineMapper;
import org.springframework.batch.item.file.transform.DelimitedLineTokenizer;
import org.springframework.stereotype.Component;

@Component
@StepScope
public class CustomReader extends FlatFileItemReader<CustomClass> {

@Override
public void afterPropertiesSet() throws Exception {
setLineMapper(new DefaultLineMapper<CustomClass>() {
{
/// configuration of line mapper
}
});
setRecordSeparatorPolicy(new BlankLineRecordSeparatorPolicy());
super.afterPropertiesSet();
}
}

关于spring - 如何使用FlatFileItemReader和 block 跳过CSV中的空白行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29673524/

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