//有时候我们需要无限循环获取数据,直到超时为止 import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Collection; import java.util.Map; public class LoopRunner { private static final Logger logger = LoggerFactory.getLogger(LoopRunner.class); private final String NO_MESSAGES_FOUND = "No messages found yet"; private static final int SLEEP_TIME = 500; private Long maxWait = 10000L; private boolean timedOut = false; public LoopRunner(long maxWait) { this.maxWait = maxWait; } public LoopRunner(Long maxWait) { this.maxWait = maxWait; } public <T> T run(LoopCondition<T> lc) { timedOut = false; T data = null; long started = System.currentTimeMillis(); ProcessTimer processTimer = new ProcessTimer(); while (System.currentTimeMillis() - started < maxWait) { String foundMessages = NO_MESSAGES_FOUND; data = lc.getData(); if (lc.test(data)) { if (data instanceof Collection<?>) { int totalCount = ((Collection<?>) data).size(); logMessageStateCounts(data, lc); logger.info("Found " + totalCount + " expected number of messages"); } return data; } try { if (data != null) foundMessages = logMessageStateCounts(data, lc); long millisecondsRemaining = maxWait - processTimer.getExecutionTimeInMilliseconds(); if (millisecondsRemaining > 0) logger.info(foundMessages + ", wait time so far: " + processTimer.getExecutionTime() + ", timing out in " + millisecondsRemaining + " ms, checking again in " + SLEEP_TIME + " ms"); Thread.sleep(SLEEP_TIME); } catch (InterruptedException e) { throw new RuntimeException(e); } } logger.warn("Timed out - could not find expected number of messages"); timedOut = true; return data; } public boolean isTimedOut() { return timedOut; } private <T> String logMessageStateCounts(T data, LoopCondition<T> lc) { Map<String, Integer> foundMessageStatusCounts = lc.getStatusCounts(data); if (foundMessageStatusCounts != null) { for (String status : foundMessageStatusCounts.keySet()) { return "Found " + foundMessageStatusCounts.get(status) + " messages with a status of " + status; } } return NO_MESSAGES_FOUND; } }
需要实现的接口:
import java.util.Map; public interface LoopCondition<T> { boolean test(T data); T getData(); Map<String, Integer> getStatusCounts(T foundMessages); }
相关推荐
使用ajax请求数据,并用循环的方式放到表格里,展示到页面。
使用Ajax get请求数据的小例子,使用$.each()循环显示到表格,里面有接口,大家可以使用,欢迎指导学习
利用kettle实现动态计算当前页码以及总页数,循环抽取大数据级数据到目标数据库中;
Kettle实现步骤循环执行 Blog:http://blog.csdn.net/jdk2006/article/details/13019093
NULL 博文链接:https://ufoqhmdt.iteye.com/blog/1313734
kettle循环从oracle源表分页读数据,写入oracle目标表。希望能对你做分页插入有所帮助!!!
主要介绍了详解vue中使用axios对同一个接口连续请求导致返回数据混乱的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Jmeter使用CSV Data Set Config参数化数据不重复的多次循环执行(实现多用户多次抽奖功能)
多线程循环读取csv文件执行请求以及CSV Data Set Config配置信息,如有什么疑问,可以在博客下留言,https://blog.csdn.net/u012811841/article/details/108710930
kettle通过在job中变量来实现循环的例子:首先从文本文件读取表名,然后循环一个个表读取数据,其中最开始的文本文件输入表名可以改为从其他地方输入(比如表输入,网络请求等)
根据名称,动态请求对比项列表,名称变化时,清空该行当前选择的对比项 思路:将整个搜索分成了两个表单,分别去做验证。一个是可动态添加的循环表单form,另一个为普通表单dateForm ...
数据抽取-Kettl动态参数调用HTTP、POST接口
在网络访问时,一般都建议用异步访问,但是... 可以看到,在执行[self main]后,执行了个包含NSRunLoop的while循环,此循环应该就是在等待数据访问结束, 以使同步请求也可取消。while循环这段代码在旧版中是没有的。
主要内容:通过for循环拿到post表单中的值并保存到一个dict中,然后通过**dict保存到数据库中。 1.用户提交了一个表单,表单内容包含csrf。 2.服务端除了表单中的csrf要过滤掉,其它的都要保存到数据库中。 3.具体看...
爬取数据:代码使用requests库发送HTTP请求,获取美食网站的页面内容。每次获取一页的内容,通过循环可以获取多页的数据。 数据处理:代码使用lxml库对HTML内容进行解析,使用XPath表达式提取美食的名称、人气、...
今天小编就为大家分享一篇ajax获得json对象数组 循环输出数据的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
Kettle8.2做的,Kettle循环获取转换中的结果集传递到下一个转换中,并最终输出到txt文档
一个作业,两个转换,第一个使用【查询分析】的组件接收sql查询结果的字段数据, 第二个转换根据上一个转换的结果为条件执行循环的业务步骤。 提示:请留意第二个转换的属性设置,需要添加命名参数以及勾选复制上...
多层嵌套循环 参数转换 数据库配置报文父子级结构 java实现
首先建立服务器的socket来监听客户端的请求: tcpSerSock=socket(AF_INET,SOCK_STREAM) tcpSerSock.bind(ADDR) tcpSerSock.listen(5) 这样服务器的监听socket就建好了。 接下来的思路是,如果要监听多个客户端,则...