2016-07-18 159 views
2

我有一個程序,其中包含一些for循環。該計劃的想法是登錄到一個網站使用多個帳戶和檢索列表(每個登錄帶來不同的列表)。所以,我的方式有它的設置是有增強的for循環:SpringBatch讀取和寫入塊

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() - >獲取列表 - >將它發送到write()....

然而,我遇到的問題是,我的循環運行在讀取方法,並沒有去寫方法,直到所有的列表已被tra精通所有的賬戶。基本上寫只在最後被調用一次,所以我現在有這樣的事情是這樣的(這是有缺陷的設計):

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:閱讀>過程>程序案例。 你將有你的讀者=獲得一個記錄 Procesor>保存一條記錄

如果沒有錯誤,Spring批處理會將您移動到下一條記錄。

<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

寫入方法讀法裏面不確定... –

+0

你需要那麼你的意思是這 – olexity

+0

了一步,如果它保存記錄,則筆者會自動調用? –