Java ItemReader返回包含整行字符串的FlatFileItemReader
使用SpringBatch,我试图将输入文件的每一行作为Java ItemReader返回包含整行字符串的FlatFileItemReader,java,spring,parsing,spring-batch,Java,Spring,Parsing,Spring Batch,使用SpringBatch,我试图将输入文件的每一行作为字符串提供给ItemProcessor,而不在ItemReader中进行任何“CSV解析” 我提出了一个配置Java类(使用@configuration和@EnableBatchProcessing),其中包含以下reader()方法,该方法使下一个ItemProcessor抛出ClassCastException 此ItemReader应读取一个输入文件,并将输入文件的每一行作为字符串传递给itemsprocessor @Bean pub
字符串
提供给ItemProcessor
,而不在ItemReader
中进行任何“CSV解析”
我提出了一个配置Java类(使用@configuration
和@EnableBatchProcessing
),其中包含以下reader()
方法,该方法使下一个ItemProcessor
抛出ClassCastException
此ItemReader
应读取一个输入文件,并将输入文件的每一行作为字符串
传递给itemsprocessor
@Bean
public ItemReader<String> reader() {
FlatFileItemReader<String> reader = new FlatFileItemReader<>();
reader.setResource(new ClassPathResource("data-to-process.txt"));
reader.setLineMapper(new DefaultLineMapper() {{
setLineTokenizer(new DelimitedLineTokenizer());
setFieldSetMapper(new PassThroughFieldSetMapper());
}});
return reader;
}
我编写的自定义ItemProcessor
定义为:
public class MyOwnCustomItemProcessor implements ItemProcessor<String, MyOwnCustomBusinessBean> {
公共类MyOwnCustomItemProcessor实现ItemProcessor{
我相信我应该在ItemReader
中使用这个PassThroughFieldSetMapper
,我不想使用任何类型的标记器。根据文档,我认为我必须使用它,我无法避免它,但我一直在抛出异常
如何将每个输入行直接作为字符串
传输到项目处理器
,例如?在其他可用的情况下使用
public class PassThroughLineMapper implements LineMapper<String> {
@Override
public String mapLine(String line, int lineNumber) throws Exception {
return line;
}
}
公共类PassThroughLineMapper实现LineMapper{
@凌驾
公共字符串映射行(字符串行,整数行号)引发异常{
回流线;
}
}
我同时还添加了一个解决方案(使用字段集
作为项目阅读器
和项目处理器
的输入参数),即使@bellabax提供了更好的解决方案
检查我如何使用类型为FieldSet
的对象
ItemReader
:
java.lang.ClassCastException: org.springframework.batch.item.file.transform.DefaultFieldSet cannot be cast to java.lang.String
@Bean
public ItemReader<FieldSet> reader() {
FlatFileItemReader<FieldSet> reader = new FlatFileItemReader<>();
reader.setResource(new ClassPathResource("data-to-process.txt"));
reader.setLineMapper(new DefaultLineMapper() {{
setLineTokenizer(new DelimitedLineTokenizer());
setFieldSetMapper(new PassThroughFieldSetMapper() {{
}});
}});
return reader;
}
项目处理器
:
public class MyOwnCustomItemProcessor implements ItemProcessor<FieldSet, MyOwnCustomBusinessBean> {
@Override
public MyOwnCustomBusinessBean process(FieldSet originalInputLineFromInputFile) throws Exception {
String originalInputLine = originalInputLineFromInputFile.getValues()[0];
[...]
公共类MyOwnCustomItemProcessor实现ItemProcessor{
@凌驾
公共MyOwnCustomBusinessBean进程(字段集originalInputLineFromInputFile)引发异常{
字符串originalInputLine=originalInputLineFromInputFile.getValues()[0];
[...]
public class MyOwnCustomItemProcessor implements ItemProcessor<FieldSet, MyOwnCustomBusinessBean> {
@Override
public MyOwnCustomBusinessBean process(FieldSet originalInputLineFromInputFile) throws Exception {
String originalInputLine = originalInputLineFromInputFile.getValues()[0];
[...]