首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从非结构化csv读取SpringBatch

从非结构化csv读取SpringBatch
EN

Stack Overflow用户
提问于 2019-02-20 21:12:17
回答 1查看 98关注 0票数 1

我想从一个非结构化的CSV文件中读取。这意味着它每次都会有不同的列类型。请帮帮忙。

EN

回答 1

Stack Overflow用户

发布于 2019-03-05 17:12:08

是的,最终我自己找到了解决方案,我想和大家分享一下。您可以编写一个LineMapper,并且可以通过以下代码将非结构化标题(动态列)映射到每一行。请注意,我在作业调度时读取了报头,并将其作为JobParameter传递。

代码语言:javascript
复制
      @Bean
  @StepScope
  public FlatFileItemReader<Customer> csvReader(@Value("#{jobParameters[filepath]}") String filepath,
      @Value("#{jobParameters[header]}") String header,
      @Value("#{jobParameters[campaignId]}") String campaignId,
      @Value("#{jobParameters[_id]}") String _id) {

    FlatFileItemReader<Customer> flatFileItemReader = new FlatFileItemReader<>();
    flatFileItemReader.setResource(new FileSystemResource(filepath));
    flatFileItemReader.setName("customer-csv-file-reader");
    flatFileItemReader.setLinesToSkip(1);
    flatFileItemReader.setLineMapper(lineMapper(header,campaignId,_id));
    return flatFileItemReader;
  }




     @Bean
        @StepScope
        public LineMapper<Customer> lineMapper(@Value("#{jobParameters[header]}") String header,
            @Value("#{jobParameters[campaignId]}") String campaignId,
            @Value("#{jobParameters[_id]}") String _id) {
          return new LineMapper<Customer>() {

            public String[] headers = header.split(",");
            @Override
            public Customer mapLine(String line, int linenumber) throws Exception {


                Customer item = new Customer();
                String[] p = line.split(",");

                Map<String, String> properties = IntStream.range(0, headers.length).boxed()
                    .collect(Collectors.toMap(i -> headers[i], i -> p[i]));

                item.setCampaignId(new ObjectId(campaignId));
                item.setInviteId(new ObjectId(_id));
                item.setProperties(properties);
                return item;

            }
          };


      }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54787181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档