我有一个类,它使用CompletableFutures向两个依赖的服务发出并发请求。
我的代码如下所示:
@Builder
@Slf4j
public class TestClass {
@NonNull private final ExecutorService threadPool = Executors.newFixedThreadPool(2);
@NonNull private final dependency1Client;
@NonNull private final dependency2Client;
public void myMethod() {
RequestObject1 firstDependencyRequest = RequestObject1.builder()
.attribute1("someValue")
.attribute2("secondValue");
CompletableFuture<ResultStructure1> future1 = CompletableFuture.supplyAsync(() -> dependency1Client.call(firstDependencyRequest), threadPool);
RequestObject2 secondDependencyRequest = RequestObject2.builder()
.attribute1("someValue")
.attribute2("secondValue");
CompletableFuture<ResultStructure2> future2 = CompletableFuture.supplyAsync(() -> dependency2Client.call(secondDependencyRequest), threadPool);
try {
CompletableFuture finalFuture = CompletableFuture.allOf(future1, future2);
} catch (ExecutionException|InterruptedException e) {
log.error("Exception calling dependency", e);
throw new RuntimeException(e);
}
}
}
我需要两次调用相关服务的结果。如何在不执行阻塞调用的情况下获取它们?我最初想做future1.get(),但这是一个阻塞调用,我必须等到第一个API调用的结果出来。
有没有一种方法可以从两个调用中获得结果?
正如completablefuture.allof()
的JavaDoc所指出的:
否则,给定CompletableFutures的结果(如果有的话)不会反映在返回的CompletableFutures中,而是可以通过单独检查它们来获得。
这意味着您必须对它们调用join()
或get()
。如果您在allof()
之后的链中这样做,它将不会阻塞,因为它已经保证了所有这些操作都已经完成。
请注意,在您的特定情况下,如果您只有两个Future,那么使用thencombine()
可能更简单,它使您更容易地访问两个结果。
问题内容: 考虑这个SQL查询 该查询将仅在字段中返回一个值。 有没有一种方法可以在不使用a并指向返回数组的第一个值的情况下获取该值? 问题答案: 将允许您直接从结果集中提取值,而不必使用 提取 方法。这是一个非常简单的示例,说明如何使用它来获取单个值: 该函数有三个参数。第一个是结果集本身,第二个是行索引,第三个是字段索引。我只使用前两个参数,因为第三个参数默认为0,即返回第一个字段。
我正在使用hibernate 4和Spring 3。 我有5个表,每个表映射一个实体类。现在,如果我必须从1个表中选择列,我将执行以下操作: 此结果中的此值将为EmployeeEntity类型。 或者我也可以使用标准。 现在我的要求是我必须从所有5个表中得到结果。每个表中有1-2列。 早些时候,它是一个1表,所以我得到了一个实体,现在我得到了5个表的结果,所以如何在实体中映射它。 List res
嗨,所以经过一些搜索仍然没有找到答案,但我想要得到一个网页的单个元素到一个字符串变量。我知道如何在C语言中实现这一点,但我想知道如何在java语言中实现这一点 例如: 谢谢 我需要将该值从网页中转换成一个字符串变量
问题内容: 到目前为止,我们有一个项目结构,其中包含名为的单个源文件夹,其中包含三个模块的源代码。我想做的是: 1)编译源代码。这可以通过sourceSets定义轻松完成: 2)将编译结果放入三个jar中。我通过三个“ jar”类型的任务来做到这一点: 我现在通过三个单独的任务来执行此操作: util.jar } client.jar } server.jar } 问题是应该包含and 中不包含的
问题内容: 我有dbo.Users表 然后我有dbo.Phones表 然后我有dbo.Relationship表 我如何进行查询返回 这就是我到目前为止所得到的。 问题答案: 在这里,将“关系”表视为“用户”和“电话”表之间的中间人。它与映射表是多对多关系。将您的用户加入到关系中,然后将其加入到您的电话中。 可以这样想: 用户: 您好关系,我的UserId = 1,我对那个UserId有什么电话I
你能帮我弄清楚为什么这个查询不返回结果吗? 我使用ogr2ogr导入了一个形状文件将其转换为GeoJson,然后使用以下命令将其导入到Mongo:“mongoimport--db ht--集合设施 下面是一个示例文档,以及未返回任何内容的查询和索引: 以下是文档(为简洁起见删除了属性): } 这是索引。我尝试了“geometry”和“geometry.coordinates”,结果相同: }