【问题标题】:Spring Batch read from .txt or .dat fileSpring Batch 从 .txt 或 .dat 文件中读取
【发布时间】:2019-04-09 22:47:04
【问题描述】:

如何从 Spring Batch 读取 .txt 或 .dat 文件。我在这些文件中有空间或管道分隔的数据,因此我如何读取该数据并将其存储到数据库中。

【问题讨论】:

    标签: spring-boot java-8 spring-batch


    【解决方案1】:

    文本文件是平面文件,因此您可以使用FlatFileItemReader。使用此阅读器,您可以使用FlatFileItemReaderBuilder.DelimitedBuilder#delimiter 将分隔符配置为空格或管道。

    【讨论】:

      【解决方案2】:

      这是我实现的最终代码及其工作 .To 从 Abc.txt 文件中读取。 filed1 ,filed2 是 Person 类属性。

      @Bean
      public FlatFileItemReader<Person> reader() {
      
          DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer();
          tokenizer.setDelimiter("|");
          tokenizer.setNames(new String[]{"filed1", "filed1"});
      
          DefaultLineMapper lineMapper = new DefaultLineMapper<Person>();
          lineMapper.setLineTokenizer(tokenizer);
      
      
          return new FlatFileItemReaderBuilder<Person>()
              .name("personItemReader")
              .resource(new ClassPathResource("Abc.txt"))
              .lineTokenizer(tokenizer)
              //.delimited()
              //.names(new String[]{"filed1", "filed1"})
              .fieldSetMapper(new BeanWrapperFieldSetMapper<Person>() {{
                  setTargetType(Person.class);
              }})
              .build();
      }
      

      写入数据库

      @Bean
      public JdbcBatchItemWriter<Person> writer(@Qualifier("localdbSource") final DataSource dataSource) {
          return new JdbcBatchItemWriterBuilder<Person>()
              .itemSqlParameterSourceProvider(new BeanPropertyItemSqlParameterSourceProvider<>())
              .sql("INSERT INTO tablename (column_name,column_name) VALUES (:filed1, :filed1)")
              .dataSource(dataSource)
              .build();
      }
      

      数据源配置如下

      @Bean
      public DataSource localdbSource() throws SQLException {
          final SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
          dataSource.setDriver(new oracle.jdbc.driver.OracleDriver());
          dataSource.setUrl("urdburl");
          dataSource.setUsername("username");
          dataSource.setPassword("Password");
          return dataSource;
      }
      

      【讨论】:

        猜你喜欢
        • 2021-06-10
        • 1970-01-01
        • 1970-01-01
        • 2015-08-30
        • 1970-01-01
        • 2021-01-04
        • 1970-01-01
        • 2018-11-23
        • 1970-01-01
        相关资源
        最近更新 更多