从.txt或.dat文件读取的Spring Batch

时间:2019-04-09 22:47:04

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

这是我实现的最后代码及其正常工作。要从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;
}