【发布时间】:2017-06-06 21:01:47
【问题描述】:
我有一个文件,其中包含由逗号(“,”)分隔的值(用户 ID)列表,如下所示。
111、222、333、444、555、777…………
该文件包含数百万条此类记录,我想将这些值保存到 RDBMS 表中的单个列中。 我尝试使用 DelimitedLineTokenizer 来解析数据。
问题是“DelimitedLineTokenizer”只考虑一行中的一个条目,其余值被忽略。第一个条目(“111”)被保存,同一行中的其余值被忽略。如果有第二行,第二行的第一个元素被保存,其余的被忽略。
有没有办法将单行中的所有逗号分隔值标记化并将它们全部保存到数据库中?
查询如下。 INSERT INTO users (id) VALUES (: userid)。
我使用以下代码解析文件并将其保存在数据库中。
public FlatFileItemReader<User> reader() {
FlatFileItemReader<User> reader = new FlatFileItemReader<User>();
DelimitedLineTokenizer reader = new DelimitedLineTokenizer(",");
reader.setNames(new String[] {“userid”});
blah…blah….blah….
reader.setLineMapper(new DefaultLineMapper<User>() {
{
setLineTokenizer(reader);
setFieldSetMapper(new BeanWrapperFieldSetMapper<User>() {
{
setTargetType(User.class);
}
});
}
});
return reader;
}
@Bean
public UserItemProcessor processor() {
return new UserItemProcessor();
}
@Bean
public Job importUserJob(JobCompletionNotificationListener listener) {
return jobBuilderFactory.get("importUserJob").incrementer(new RunIdIncrementer()).listener(listener)
.flow(step1()).end().build();
}
@Bean
public Step step1() {
return stepBuilderFactory.get("step1").<User, User> chunk(5).reader(reader()).processor(processor())
.writer(writer()).build();
}
【问题讨论】:
标签: spring-batch