SpringBatch Чтение из неструктурированных CSV - PullRequest
0 голосов
/ 20 февраля 2019

Я хотел бы прочитать из неструктурированного файла CSV.Это означает, что у него будут разные типы столбцов каждый раз.Пожалуйста, помогите.

1 Ответ

0 голосов
/ 05 марта 2019

Да, наконец-то Сам нашел решение, и я хотел бы поделиться с вами.Вы можете написать LineMapper и сопоставить неструктурированный заголовок (динамические столбцы) с каждой строкой с помощью следующего кода.Обратите внимание, что я прочитал заголовок при планировании работы и передал его как JobParameter.

      @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;

            }
          };


      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...