我的待办事项清单
>
rest api获取请求约600000次--600000=2009~now*condition1*condition2*condition3*condition4
处理json数据=600,000*n(使{平面json}...从{[json数组]})
在mariaDB中插入数据(600000*n)
我使用4个嵌套循环(条件数)创建了一个请求url,并在一个开放连接上收到了响应数据。
但是,一些数据导致读取超时(con.setReadTimeout(1000*60)--1min)。
我的方法一天内没有收到所有数据。
而insert甚至都没试过。
我想我应该一次多线程完成待办事项列表,对吗?
请告知如何快速安全地调用rest api并处理数据和插入。
下面是我的代码。
ExecutorService executor = Executors.newWorkStealingPool();
List<Callable<String>> callables = null;
for (String url : urlList) { //600,000 count
callables.add(getRestapiData(url)); //call rest api
}
try {
executor.invokeAll(callables)
.stream()
.map(future -> {
try {
return future.get();
} catch (Exception e) {
throw new IllegalStateException(e);
}
}).map(DataSummaryServiceLogic::getSettedKamisApi1DataList). //process ->return (600,000 * list.size) list
flatMap(Collection::stream).
forEach(api1 -> provider.insertInitKamisApi1(api1)); //insertData
} catch (InterruptedException e) {
e.printStackTrace();
}
@基于您共享的有限信息,您需要进行适当的异常处理。如果一个请求超时超过600k,则不应导致其他请求失败。您可以在日志/重新处理表等中捕获由于任何原因失败的请求,然后重试。
在实现多线程时,你可以使用一个线程池,并向他们提交单独的请求,以使其更快,因为你有足够的内核来执行这些额外的线程。
问题内容: 假设您有一个用于处理某种XML文件或配置文件的库。该库将整个文件读入内存,并提供用于编辑内容的方法。处理完内容后,可以调用将内容保存回文件。问题是如何以安全的方式执行此操作。 覆盖现有文件(开始写入原始文件)显然是不安全的。如果该方法在完成之前失败,则最终将写入一半的文件,并且您丢失了数据。 更好的选择是在某个位置写入 临时 文件,方法完成后, 将 临时文件 复制 到原始文件。 现在,
问题内容: 我找不到任何资源,我一直在尝试各种方法,但是没有任何效果。 根据Apple的文档,您对NSDecimalNumber进行如下舍入: 它接受一个NSDecimalNumberBehavior,我不确定如何操作,因为(1)无法将其初始化为变量并更改了属性,并且(2)根据文档所述的roundingMode()方法没有任何参数,但Xcode会为“ self”填充参数空间。 我对此完全迷失了。回
Vanilla 的 调试 除了查看 nginx 错误日志辅助开发外,为了方便 Vanilla 项目的开发和调试,Vanilla 提供了诸如 print_r 之类的对象输出方法,以及详细友好的页面报错输出,你不需要到服务器日志去查看,就能所见即所得的开发调试代码. sprint_r,print_r,lprint_r,err_log sprint_r 将 LUA 对象等格式化为易读的字符串返回 pri
从前面分析可以看出,某个vm的安全组相关规则的chain的名字,跟vm的id的前9个字符有关。 因此,要快速查找qbr-XXX上相关的iptables规则,可以用iptables -S列出(默认是filter表)所有链上的规则,其中含有id的链即为虚拟机相关的安全组规则。其中--physdev-in表示即将进入某个网桥的端口,--physdev-out表示即将从某个网桥端口发出。 #iptable
文档中说
问题内容: 我如何获得本地IpAddress? 当我使用该功能时,我将无法再继续使用。我不能使用该功能。 是否有其他方法可以执行此操作,或者我是否以错误的方式进行操作? 问题答案: 在讨论中发现,OP需要Mac上的接口地址,而不是我最初想的那样在iOS设备上。问题中引用的代码将检查接口名称“en0”,它是iPhone上的WiFi接口。在Mac上,改为检查任何“正在运行”的界面更有意义。因此,我重写