2016-07-18 12 views
2

いくつかのfor-loopsを含むプログラムがあります。プログラムのアイデアは、複数のアカウントを使用してウェブサイトにログインし、リストを取得することです(ログインごとに別のリストが表示されます)。 >リストを取得---- -SpringBatch読み込みとチャンクでの書き込み

読み取り():だから私はそれはセットアップが拡張forループである持っている方法:

loginsList.put("firstUsername", "firstPassword"); 
loginsList.put("secondUsername", "secondPassword"); 
loginsList.put("thirdUsername", "thirdPassword"); 
loginsList.put("fourthUsername", "fourthPassword"); 
loginsList.put("fifthUsername", "fifthPassword"); 

for (Entry<String, String> nextLogin : logins.entrySet()) { 
    String nextUser = nextLogin.getKey(); 
    String nextPass = nextLogin.getValue(); 

    Response authenticateUserResponse = Jsoup.connect(WEBSITE_I_NEED_TO_LOGIN_TO) 
      .data("username", nextUser) 
      .data("password", nextPass) 
      .execute(); 

基本的にここでは、私は流れになりたいものです>リストをデータベースに書き込むwrite()メソッド - >ループバックして次のログインを得る - > read() - > listを取得する - > write()に送る...

しかし、私のループは読み込みメソッドで実行され、すべてのリストがtraになるまで書き込みメソッドには行きませんすべてのアカウントに精通しています。基本的に書き込みは最後に1回だけ呼び出されるので、今の私はこれのようなものです(これは欠陥のあるデザインです):

read()--->次のアカウントを取得する--->リストを取得---次のアカウント--->リストを取得--->書き込み()

チャンクを読み込んだ後で、書き込みするためにSpringのチャンク処理をどのように整理できますか?

答えて

0
for (Entry<String, String> nextLogin : logins.entrySet()) { 
    String nextUser = nextLogin.getKey(); 
    String nextPass = nextLogin.getValue(); 
    //do something 
     ...... 
    //call write function 
writeValues(x, y, z); 
} 

これでいいですか? そうでなければ、伝統的なSpringBatch:Read> Process> Proceeedのように見えます。 あなたのリーダーはレコードを取得します Procesor>レコードを保存します

エラーがなければ次のレコードに移動します。

<step id="processUpdates"> 
     <tasklet task-executor="batchThreadPoolTaskExecutor" throttle-limit="${batch.cviscoreupdate.threadcount}"> 
      <chunk reader="Reader" processor="ItemProcessor" writer="ItemWriter" commit-interval="${batch.commit.interval}" skip-limit="${batch.skip.limit}" > 
       <skippable-exception-classes> 
        <include class="batch.support.SkipRecordException" /> 
       </skippable-exception-classes> 
      </chunk> 
     </tasklet> 
     <next on="FAILED" to="errorExit"/>   
     <next on="*" to="moveFilesFromWorkToDone" /> 
     <listeners> 
      <listener ref="UpdateSkipListener"/> 
     </listeners> 
    </step> 

<bean id="CVIScoreUpdateItemProcessor" class="com.batch.MyUpdateItemProcessor" scope="step" init-method="init" /> 
+0

writeメソッドは、readメソッドの内部で定義されていない... –

+0

は、あなたはそれがその後、作家が自動的に呼び出され、レコードを保存している場合、この – olexity

+0

ようなステップはあなたが言っている必要がありますか? –

関連する問題