Java Spring批处理ItemReader在第一行获取NullPointerException
当我尝试读取我的csv文件时,SpringBatch出现了这个问题 我必须阅读结构如下的CSV:Java Spring批处理ItemReader在第一行获取NullPointerException,java,spring,spring-batch,spring-batch-tasklet,Java,Spring,Spring Batch,Spring Batch Tasklet,当我尝试读取我的csv文件时,SpringBatch出现了这个问题 我必须阅读结构如下的CSV: valueHeader;valueHeader;valueHeader;valueHeader;valueHeader;valueHeader conventValue;conventValue;conventValue;conventValue;conventValue conventValue;conventValue;conventValue;conventValue;conventValue
valueHeader;valueHeader;valueHeader;valueHeader;valueHeader;valueHeader
conventValue;conventValue;conventValue;conventValue;conventValue
conventValue;conventValue;conventValue;conventValue;conventValue
conventValue;conventValue;conventValue;conventValue;conventValue
valueFooter;valueFooter;valueFooter;valueFooter;valueFooter;valueFooter
@Autowired
private MultiResourceItemReader<String> resourceItemReader;
我有一个MultiResourceItemReader,它在字符串类型的FlatFileItemReader上进行委托,以便轻松地将这些行映射到我的自定义项目处理器中的自定义DTO,该处理器在之后执行
在我的Tasklet中,我注入了MultiResourceItemReader bean,如下所示:
valueHeader;valueHeader;valueHeader;valueHeader;valueHeader;valueHeader
conventValue;conventValue;conventValue;conventValue;conventValue
conventValue;conventValue;conventValue;conventValue;conventValue
conventValue;conventValue;conventValue;conventValue;conventValue
valueFooter;valueFooter;valueFooter;valueFooter;valueFooter;valueFooter
@Autowired
private MultiResourceItemReader<String> resourceItemReader;
我还将附加我的readerItems bean:
@Bean
MultiResourceItemReader<String> resourceItemReader(FlatFileItemReader<String> flatFileItemReader){
MultiResourceItemReader<String> resourceItemReader = new MultiResourceItemReader<>();
resourceItemReader.setDelegate(flatFileItemReader);
resourceItemReader.setStrict(false);
return resourceItemReader;
}
@Bean
FlatFileItemReader<String> flatFileItemReader() {
FlatFileItemReader<String> reader = new FlatFileItemReader<String>();
reader.setStrict(false);
reader.setLineMapper(new DefaultLineMapper<String>() {
{
//Setea los valores en la clase indicada
setFieldSetMapper(new FieldSetMapper<String>() {
@Override
public String mapFieldSet(FieldSet fieldSet) throws BindException {
String[] values = fieldSet.getValues();
return String.join(";", values);
}
});
}
});
return reader;
}
@Bean
MultiResourceItemReader resourceItemReader(FlatFileItemReader FlatFileItemReader){
MultiResourceItemReader resourceItemReader=新的MultiResourceItemReader();
setDelegate(flatFileItemReader);
resourceItemReader.setStrict(false);
返回resourceItemReader;
}
@豆子
FlatFileItemReader FlatFileItemReader(){
FlatFileItemReader=新的FlatFileItemReader();
reader.setStrict(假);
reader.setLineMapper(新的DefaultLineMapper(){
{
//瓦洛雷斯山脉
setFieldSetMapper(新的FieldSetMapper(){
@凌驾
公共字符串映射字段集(字段集字段集)引发BindException{
String[]values=fieldSet.getValues();
返回字符串。join(“;”,值);
}
});
}
});
返回读取器;
}
您没有在测线器上设置测线标记器。下面是如何添加一个:
reader.setLineMapper(new DefaultLineMapper<String>() {
{
//Setea los valores en la clase indicada
setFieldSetMapper(new FieldSetMapper<String>() {
@Override
public String mapFieldSet(FieldSet fieldSet) throws BindException {
String[] values = fieldSet.getValues();
return String.join(";", values);
}
});
setLineTokenizer(new DelimitedLineTokenizer(";"));
}
});
希望这有帮助。您没有在测线器上设置测线标记器。下面是如何添加一个:
reader.setLineMapper(new DefaultLineMapper<String>() {
{
//Setea los valores en la clase indicada
setFieldSetMapper(new FieldSetMapper<String>() {
@Override
public String mapFieldSet(FieldSet fieldSet) throws BindException {
String[] values = fieldSet.getValues();
return String.join(";", values);
}
});
setLineTokenizer(new DelimitedLineTokenizer(";"));
}
});
希望这有帮助。根本原因是DefaultLineMapper.java第43行出现空指针异常。这到底是哪一行?根本原因是DefaultLineMapper.java的第43行出现空指针异常。那到底是哪一行?哦,我明白了,谢谢你的帮助。Spring批处理对我来说有点奇怪:)我建议使用FlatFileItemReaderBuilder
。我在答案上加了一个例子。哦,我明白了,谢谢你的帮助。Spring批处理对我来说有点奇怪:)我建议使用FlatFileItemReaderBuilder
。我在答案上加了一个例子。