2016-07-18 122 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

了一步,如果它保存记录,则笔者会自动调用? –