我有一个包含一些for循环的程序。该计划的想法是使用多个帐户登录网站并检索列表(每个登录带来不同的列表)。所以我设置它的方式是增强的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();
基本上这就是我想要的流程:
读() - &GT;获取清单----&gt;将list发送到write()方法将其写入数据库 - &gt;循环回来并获得下一次登录 - &gt; read() - &gt;获取列表 - &gt;将其发送到write()....等..
然而我遇到的问题是我的循环在read方法中运行,并且在所有帐户中遍历所有列表之前不会转到write方法。基本上写入只是在结尾处被调用一次,所以我现在所拥有的就是这样(这是有缺陷的设计):
read()---&gt;获取列表 - &gt;下一个帐号---&gt;获取列表---下一个帐号---&gt;获取列表---&gt; write()
如何在仅读取块后在Spring中组织块处理?
答案 0 :(得分: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&gt;处理&gt;处理案件。 你的读者会得到一个记录 处理器&gt;保存记录
如果没有错误,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" />