私は、値(ユーザID)のリストをカンマ( "、")で区切って次のようにしています。スプリングバッチ - カンマ区切り値 - データベースに保存
111、222、333、444、555、777 ............
ファイルには、数百万レコードが含まれていると私はRDBMSのテーブル内の単一の列にこれらの値を保存したかったです。 データの解析にDelimitedLineTokenizerを使用しようとしました。
"DelimitedLineTokenizer"は1行の中の1つのエントリだけを考慮し、残りの値は無視されます。最初のエントリ( "111")は保存され、同じ行の残りの値は無視されます。 2行目がある場合、2行目の最初の要素は保存され、残りは無視されます。
カンマ区切りのすべての値を1行でトークン化し、すべてをDBに保存する方法はありますか?
クエリは次のとおりです。 INSERT INTOユーザー(ID)VALUES(:userid)。
次のコードを使用してファイルを解析し、DBに保存しました。コンマ&新ライン -
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();
}