Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring批处理ItemReader在第一行获取NullPointerException_Java_Spring_Spring Batch_Spring Batch Tasklet - Fatal编程技术网

Java Spring批处理ItemReader在第一行获取NullPointerException

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

当我尝试读取我的csv文件时,SpringBatch出现了这个问题

我必须阅读结构如下的CSV

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
。我在答案上加了一个例子。