我们有一个用例,使用下面的连接资源代码从共享对象存储桶加载100M记录到Mongo DB
HttpURLConnection httpConnection = null;
try {
httpConnection = (HttpURLConnection) this.url.openConnection();
ResourceUtils.useCachesIfNecessary(httpConnection);
if(StringUtils.hasText(byteRangeHeader)) {
httpConnection.setRequestProperty("Range", String.format("bytes=%s", byteRangeHeader));
}
inputStream = httpConnection.getInputStream();
} catch (Exception e) {
e.printStacktrace
}
return inputStream;
我们使用基于“范围”头的分区,并使用15个线程加载100M记录。这大约需要30分钟。问题是HTTP连接在15分钟内被网络设备关闭。我们该怎么处理这种情况?
1.加载100M记录到内存中并处理它(我可以做多进程和多线程)
1.连接必须在15分钟前刷新,但如果我建立了新的连接,Spring批处理读取器能否在上次完成的地方继续?
1条答案
按热度按时间mpbci0fu1#
您没有提到您使用的读取器,但是如果它继承自
AbstractItemCountingItemStreamItemReader
,那么即使它从远程资源读取,也可以在重启场景中使用它(它将从保存在元数据存储库中的最后一个偏移量恢复阅读)。如果您有足够的本地存储,另一种选择是下载文件或在第一步中将其暂存在数据库表/集合中,然后在下一步中处理它。