为了账号安全,请及时绑定邮箱和手机立即绑定

Spring Batch ItemReader 在第一行获取 NullPointer

Spring Batch ItemReader 在第一行获取 NullPointer

不负相思意 2023-03-09 11:19:44
当我尝试读取我的 csv 文件时,我遇到了 Spring batch 的这个问题。我必须阅读具有如下结构的CSV :valueHeader;valueHeader;valueHeader;valueHeader;valueHeader;valueHeaderconventValue;conventValue;conventValue;conventValue;conventValueconventValue;conventValue;conventValue;conventValue;conventValueconventValue;conventValue;conventValue;conventValue;conventValuevalueFooter;valueFooter;valueFooter;valueFooter;valueFooter;valueFooter我有一个MultiResourceItemReader,它委托一个String 类型的FlatFileItemReader,以便轻松地将此行映射到我在之后执行的自定义项处理器中的自定义 DTO。在我的 Tasklet 中,我像这样注入了我的 MultiResourceItemReader bean:@Autowired    private MultiResourceItemReader<String> resourceItemReader;然后我这样称呼它(设置资源和上下文):    resourceItemReader.setStrict(Boolean.FALSE);    resourceItemReader.setResources(resources);    resourceItemReader.open(context.getStepContext().getStepExecution().getExecutionContext());    String currentContent = resourceItemReader.read();    while(currentContent != null) {        linesReaded.add(currentContent);        currentContent = resourceItemReader.read();    }But I am getting a **NullPointerException** in the first Line and I don't know why:20190705 19:53:30.041 INFO   com.mycomp.mycustomp.tasklet.MyCustomTasklet [[ # ]] - [MyCustomTasklet:EXECUTE]20190705 19:53:41.560 ERROR  org.springframework.batch.core.step.AbstractStep [[ # ]] - Encountered an error executing step processRebateASLIStep in job MyProyectJob
查看完整描述

1 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

您没有在您的LineMapper. 这是添加一个的方法:


    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(";"));


        }

    });

FlatFileItemReaderBuilder由于其流畅的 API,我建议使用 which更直观。这是一个例子:


@Bean

public FlatFileItemReader<Pojo> flatFileItemReader() {

    return new FlatFileItemReaderBuilder<Pojo>()

            .name("itemReader")

            .resource(new FileSystemResource("/path/to/flat/file"))

            .targetType(Pojo.class)

            .delimited()

            .delimiter(";")

            .names("column1", "column2")

            .build();

}


查看完整回答
反对 回复 2023-03-09
  • 1 回答
  • 0 关注
  • 96 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信