当前位置: 首页 > 知识库问答 >
问题:

在使用@Async注释的方法中使用Spring4 AsyncRestTemplate

楚彦
2023-03-14

我正在使用Spring4 AsyncRestTemplate调用外部REST API服务。

在该方法中,我注册来自REST API调用的ListenableFuture响应的回调。

除了单元测试,我不使用返回的ListenableFuture。回调将根据请求的成功或失败来处理我想采取的实际操作。

ExternalServiceImpl.class

public ListenableFuture<ResponseEntity<ResponseBody>> makeExternalCall(RequestBody requestBody) {

            HttpEntity<RequestBody> request = new HttpEntity<>(RequestBody, getDefaultHeaders());

            ListenableFuture<ResponseEntity<ResponseBody>> responseEntity = asyncRestTemplate.exchange(serviceUri.toUriString(), HttpMethod.POST, request, ResponseBody.class);

            responseEntity.addCallback(
                    (onSuccess) -> System.out.println("Success"), 
                    (onFailure) -> onFailure.printStackTrace()
            );

            return responseEntity;
    }

共有1个答案

阎星河
2023-03-14

在将@enableAsync注释添加到应用程序之前,@async实际上不会执行任何操作。当这种情况发生时,调用MakeExternalCall方法的任何代码都将立即返回,spring将寻找TaskExecutorbean来异步运行整个方法(而不仅仅是您的AsyncrestTemplate服务是当前代码中唯一的异步部分)。

有关spring网站的更多信息:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html

 类似资料:
  • 我对@Async和Rest模板调用有问题;下面是我的主要应用程序类,带有一个任务执行器Bean和EnableAsync注释 这是我在Rest控制器中调用的带有异步注释的my测试服务: 此服务在rest模板上返回一个nullPointer;这是stacktrace 但是如果我删除@enableAsync和@Async,那么简单的Rest模板可以很好地工作。 当我传递HttpServlet请求时,Ec

  • 下面的@Retryable代码适用于直接调用方法的情况,但通过@Async annotated method调用Retryable方法会引发异常。有什么建议吗? 这是我的服务课 这是Junit测试类 这里是Spring Boot应用程序类 例外如下。请对此提出任何建议。 retryWithException-0

  • 问题内容: 我刚刚开始在Java 8中使用注释,并得到了一些意外的结果。 我有这样的方法: 我编写了一个JUnit测试,为参数searchList传递了空值。我原以为会发生某种类型的错误,但好像没有注释就通过了。这是预期的行为吗?据我了解,这是允许您跳过编写样板空检查代码。 对于@NotNull应该做什么的解释将不胜感激。 问题答案: 和自己做什么。它们应该充当文档工具。 该注释提醒您在以下情况下

  • 我编写了一个JUnit测试,为参数searchingList传入null值。我原以为会发生某种类型的错误,但结果好像注释不在那里一样。这是意料之中的行为吗?根据我的理解,这是允许您跳过编写样板空校验代码。 如果能解释一下@NotNull到底应该做什么,将会非常感谢。

  • 本文向大家介绍解读Ruby中注释的使用方法,包括了解读Ruby中注释的使用方法的使用技巧和注意事项,需要的朋友参考一下  Ruby行内注释的代码在运行时被忽略。单行注释#字符开始,他们从#到行末如下: 上述程序执行时,会产生以下结果: Ruby的多行注释 可以注释掉多行使用 =begin 和 =end 语法如下: 上述程序执行时,会产生以下结果: 确保后面的注释是保持足够的距离的代码,能使它很容易

  • 问题内容: 有人可以给MWE 直接在方法上使用注释的方法吗? 我已经看到了无数的关于在类定义中使用它的示例-但还没有方法的示例。 引用文档: 这种添加到一个类定义或 一个方法 @Target(value = {TYPE, METHOD }) 因此,我认为还有一种可能性和预期的用途-但不幸的是,我无法弄清楚。 问题答案: 这里的DataSource类具有属性url,用户名,密码,driverClas