Spring CompletableFuture全部异步运行3个任务

Spring CompletableFuture全部异步运行3个任务,spring,spring-boot,completable-future,Spring,Spring Boot,Completable Future,在我的应用程序中,我们将数据保存到事务块内的表和ES中 表A(内部使用OneToMany) 表B 弹性搜索 由于上面3个是独立的操作,我想使用CompletableFuture.allOf(),但找不到正确的例子 注意:我不能妥协跨国行为,并希望提高性能以异步运行以上3项。期望返回布尔值以确保在返回201之前操作成功 allOf factory方法将CompletableFutures数组作为输入,并>返回一个CompletableFutures,只有当传递的所有>CompletableFu

在我的应用程序中,我们将数据保存到事务块内的表和ES中

  • 表A(内部使用OneToMany)
  • 表B
  • 弹性搜索
由于上面3个是独立的操作,我想使用CompletableFuture.allOf(),但找不到正确的例子

注意:我不能妥协跨国行为,并希望提高性能以异步运行以上3项。期望返回布尔值以确保在返回201之前操作成功

allOf factory方法将CompletableFutures数组作为输入,并>返回一个CompletableFutures,只有当传递的所有>CompletableFutures都已完成时,它才会完成

以上是拉乌尔·加布里埃尔·乌尔马、马里奥·福斯科和艾伦·米克罗夫特在《Java 8在行动》中提到的

创建一个CompletableFutures数组,并提供给allOf factory方法。只有当所有completableFuture完成时,此操作才会完成

对于您的用例,合并操作符最适合,因为它可以异步合并两个CompletableFutures,而无需等待另一个完成。从两个CompletableFutures获得响应后,您可以在联合运算符中决定如何组合这两个。 比如说,

CompletableFuture-tableAFuture=CompletableFuture.supplyAsync(()->dao.insert(tableA)); CompletableFuture tableBFuture=CompletableFuture.supplyAsync(()->dao.insert(tableB))

CompletableFuture combined future=tableAFuture。然后组合(tableBFuture,(tableAFuture,tableBFuture)->tableAFuture&&tableBFuture)

类似地,您可以为弹性搜索中的保存任务定义另一个可完成的未来,并将其与combinedFuture相结合。因此,您所有可完成的未来都将异步工作

如果您想了解CompletableFuture的运算符和Java 8的其他特性,“Java 8 in Action”是一本不错的读物(下面给出了链接)

allOf factory方法将CompletableFutures数组作为输入,并>返回一个CompletableFutures,只有当传递的所有>CompletableFutures都已完成时,它才会完成

以上是拉乌尔·加布里埃尔·乌尔马、马里奥·福斯科和艾伦·米克罗夫特在《Java 8在行动》中提到的

创建一个CompletableFutures数组,并提供给allOf factory方法。只有当所有completableFuture完成时,此操作才会完成

对于您的用例,合并操作符最适合,因为它可以异步合并两个CompletableFutures,而无需等待另一个完成。从两个CompletableFutures获得响应后,您可以在联合运算符中决定如何组合这两个。 比如说,

CompletableFuture-tableAFuture=CompletableFuture.supplyAsync(()->dao.insert(tableA)); CompletableFuture tableBFuture=CompletableFuture.supplyAsync(()->dao.insert(tableB))

CompletableFuture combined future=tableAFuture。然后组合(tableBFuture,(tableAFuture,tableBFuture)->tableAFuture&&tableBFuture)

类似地,您可以为弹性搜索中的保存任务定义另一个可完成的未来,并将其与combinedFuture相结合。因此,您所有可完成的未来都将异步工作

如果您想了解CompletableFuture的运算符和Java 8的其他特性,“Java 8 in Action”是一本不错的读物(下面给出了链接)

我知道这种方法,但不知道是否可以同时运行这三种方法。看来我们没有太多的选择和完整的未来,必须做它在旧的方式。我知道这种方法,但不知道我是否可以运行这三个并行。看来,我们没有太多的选择与完整的未来,必须做它在旧的方式。