我知道有很多方法可以GET从遥控器获取数据。我尝试过这些不同的类型:使用curl内的Runtime.getRuntime().exec(...)或new ProcessBuilder(...).start();使用库作为URL或RestTemplate;在使用其中之一之前,我们应该考虑它们之间是否存在一些显着差异?更新 #0为什么我会问这个看似主题过于宽泛或基于意见的问题?我遇到使用问题,ProcessorBuilder在高并发系统中,会有一些TimeOut同时使用RestTemplate,有没有?在挖掘和调试之后,我没有发现与结果完全相关的内容,我问了这个问题以了解我可能忽略了什么。 List<CompletableFuture<GrafanaDashboard>> futureList = dbList.stream() .map(boardName -> CompletableFuture.supplyAsync(() -> GrafanaRetriever .parseDashboard(apiUrl, tokenString, boardName), Executors.newCachedThreadPool())) .collect(Collectors.toList()); for (CompletableFuture<GrafanaDashboard> completableFuture : futureList) { try { dashboards.add(completableFuture.get(30, TimeUnit.SECONDS)); // using ProcessorBuilder, it will hang here and some might time out (not all just some) // using RestTemplate, it will not wait almost, just smooth and no time out at all; } catch (ExecutionException | InterruptedException | TimeoutException e) { log.warn("Retrieving data from grafana failed due to TimeOut most likely by {}", apiUrl); e.printStackTrace(); } }
2 回答
紫衣仙女
TA贡献1839条经验 获得超15个赞
使用 rest 模板(或另一个用于 http 请求的 java 库,甚至是在 java URL 包中构建)比使用 Runtime 更好。除了以后可能很重要的可移植性之外,即使您认为现在不需要它,还有其他优点。
代码更易于维护和理解(想象一个不理解 curl -D -X -H 等的开发人员)。调试起来更容易。例如,当它花费太长时间并且更容易进行错误处理时,您可以使用某种断路器。您可以在读取它们等过程中处理结果。基本上,您拥有控制权,而不是一些外部工具。
使用 Runtime 可能会让您免于编写几行代码,但由于您正在编写 Java 程序,因此最好以 Java 方式进行 ;)
四季花海
TA贡献1811条经验 获得超5个赞
对于击中,GET
我宁愿使用 Java。由于以下原因:
一种。Curl 通常在 *nix 上找到。使用 Java,您的代码应该是平台独立的。如果将来您的代码需要在 Windows 上运行。它将带有 curl 或潜在代码更改的依赖项。
湾 您可以更好地处理错误,而无需解析 curl 的输出或其退出代码。
C。如果 GET API 的输出需要被解析,像 Spring 这样的库可以帮助你。
添加回答
举报
0/150
提交
取消