如何从Spring Batch中读取.txt或.dat文件。我在那些文件中有空格或管道分隔的数据,因此我如何读取该数据并将其存储到数据库中。
答案 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;
}