2017-06-06 17 views
0

私は、値(ユーザ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(); 
    } 

答えて

0

基本的には、ターゲットオブジェクトのための2つの区切り文字を持っています。したがって、両方のデリミタで動作するカスタムリーダーを作成するか、標準形式にするためにファイルを事前に処理する必要があります。

私の意見では、ファイルを前処理してすべてのカンマを改行文字に置き換える方がよいと思います。

元のファイルをそのまま保持し、新しい一時ファイルで事前処理されたデータを作成する場合があります。

個別のスプリングバッチステップ(ファイルサイズのために推奨されない)として、またはキックオフスクリプトでスケジュールされたジョブになる可能性があります。

Replace comma with newline in java

How to break lines at a specific character in Notepad++?

Notepad++ find and replace string with a new-line

Replace comma with new line in a text file using tr in Linux