首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

spring boot DeferredResult onError如何调用回调?

在Spring Boot中,DeferredResult是一个用于异步处理请求结果的类。当处理请求的方法需要较长时间才能完成时,可以使用DeferredResult来处理异步请求,以避免阻塞其他请求。

当DeferredResult处理过程中发生错误时,可以通过调用onError方法来触发回调。具体的调用方式如下:

  1. 首先,在处理请求的方法中创建一个DeferredResult对象,并设置相应的回调方法。例如:
代码语言:txt
复制
DeferredResult<String> deferredResult = new DeferredResult<>();
deferredResult.onError((Throwable ex) -> {
    // 错误处理逻辑
});
  1. 在处理请求的方法中,如果发生错误,可以通过调用DeferredResult的setErrorResult方法来触发回调。例如:
代码语言:txt
复制
if (发生错误) {
    deferredResult.setErrorResult(错误信息);
}
  1. 在回调方法中,可以对错误进行处理,例如记录日志、返回错误信息等。例如:
代码语言:txt
复制
deferredResult.onError((Throwable ex) -> {
    // 错误处理逻辑
    logger.error("发生错误:" + ex.getMessage());
    return "错误信息";
});

需要注意的是,DeferredResult的回调方法是在容器的线程中执行的,因此在回调方法中应该避免进行耗时操作,以免影响其他请求的处理。

关于Spring Boot的DeferredResult的更多信息,可以参考腾讯云的相关产品文档:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Spring Boot 深度优,6得飞起~

项目优 作为一名工程师,项目优这事,是必须得熟练掌握的事情。 在SpringBoot项目中,优主要通过配置文件和配置JVM的参数的方式进行。...SpringBoot项目详细的配置文件修改文档: https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html...二、Jvm优 关于Jvm优Oracle官网有一份指导说明: https://docs.oracle.com/middleware/11119/wls/PERFM/jvm_tuning.htm#i1146060...三、Jvm优实战 1、未设置JVM参数的情况 我现在有一个项目,默认情况下,没有设置任何Jvm参数。 下面我来启动看一下。 ? 看一下堆栈分配: 很明显默认的最大堆内存分配了8个G。...关于这些设置的JVM参数是什么意思,请参考第二步中的oracle官方给出的优文档。

58910

【小家Spring】高性能关键技术之---体验Spring MVC的异步模式(Callable、WebAsyncTask、DeferredResult) 基础使用篇

Spring MVC异步模式Demo Show Spring MVC3.2之后支持异步请求,能够在controller中返回一个Callable或者DeferredResult。...如果我们需要超时处理的回或者错误处理的回,我们可以使用WebAsyncTask代替Callable 实际使用中,我并不建议直接使用Callable ,而是使用Spring提供的WebAsyncTask...); // 备注:这个是Spring5新增的 webAsyncTask.onError(() -> "程序[出现异常]的回"); System.out.println...public void onTimeout(Callable callback) { this.timeoutCallback = callback; } public void onError...有些较常见的场景, Callable也并不能解决,比如说:我们访问A接口,A接口调用三方的服务,服务回(注意此处指的回,不是返回值)B接口,这种情况就没办法使用Callable了,这个时候可以使用DeferredResult

2.8K50

SpringBoot的四种异步处理,写这篇文章,我自己先学到了

最近更新了一系列关于异步和回的文章,比如《一篇文章,搞明白异步和多线程的区别》、《两个经典例子让你彻底理解java回机制》、《异步请求和异步调用有区别?》,大家感兴趣的话可温习一下。...基于Spring实现异步请求 基于Spring可以通过Callable、DeferredResult或者WebAsyncTask等方式实现异步请求。...基于WebAsyncTask实现 Spring提供的WebAsyncTask是对Callable的包装,提供了更强大的功能,比如:处理超时回、错误回、完成回等。...的调用并不一定在Spring MVC当中,它可以是别的线程。...整个执行流程如下: controller返回一个DeferredResult,把它保存到内存里或者List里面(供后续访问); Spring MVC调用request.startAsync(),开启异步处理

1.7K30

Spring Boot项目优化和JVM

大家好,我是老田 今天来和大家聊聊:Spring Boot项目优化和JVM优 背景 作为一名工程师,项目优这事,是必须得熟练掌握的事情。...在Spring Boot项目中,优主要通过配置文件和配置JVM的参数的方式进行。 修改配置文件 关于修改配置文件application.properties。...Spring Boot项目详细的配置文件修改文档: https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html...关于JVM优 Oracle官网有一份指导说明: Oracle官网对 JVM优的说明: https://docs.oracle.com/middleware/11119/wls/PERFM/jvm_tuning.htm...图片 2、如何设置JVM参数 例如要配置JVM这么一大段参数: -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m

2.4K40

提升 Spring Boot 吞吐量的 7 个神技,让你的项目飞起来!

org.springframework.boot   spring-boot-starter-undertow... Spring Boot 基础就不介绍了,推荐下这个实战教程:https://github.com/javastacks/spring-boot-best-practice...;    }   });         // 处理完成的回方法,无论是超时还是处理成功,都会进入这个回方法         deferredResult.onCompletion(new Runnable...Spring Boot 学习笔记,这个太全了! 23 种设计模式实战(很全) Java 8 排序的 10 个姿势,太秀了吧! Spring Boot 保护敏感配置的 4 种方法!...Java技术栈 专注分享Java技术干货,包括多线程、JVM、Spring BootSpring Cloud、Intellij IDEA、Dubbo、Zookeeper、Redis、架构设计、微服务、

51410

异步编程 - 10 Web Servlet的异步非阻塞处理

下面我们看看Servlet 3.1是如何让数据就绪时才分配业务线程来进数据读取,做到需要时(数据就绪时)才分配的。...下面我们结合下图来具体说明Servlet3.1中的ReadListener是如何高效利用线程的。...Spring MVC与前面讲解的Servlet 3.0异步请求处理有很深的集成: DeferredResult和Callable作为controller方法中的返回值,并为单个异步返回值提供基本支持。...并且调用DeferredResult对象的setResultHandler方法,设置当异步结果产生后对结果进行重新路由的回函数(逻辑在WebAsyncManager的startDeferredResultProcessing...3)最终在业务线程池中执行的异步任务会产生一个结果,该结果会被设置到DeferredResult对象,然后设置的回函数会被调用,接着Spring MVC会分派请求结果回到Servlet容器继续完成处理

55620

为何现在响应式编程在业务开发微服务开发不普及

不论是Java自带的Future框架,还是 Spring WebFlux,还是 Vert.x,他们都是一种非阻塞的基于Ractor模型的框架(后两个框架都是利用netty实现)。...之后数据库返回数据,这个链接的 Selector 会有 Read 事件准备就绪,这时候,再通过这个线程池去读取数据处理(相当于回),这时候用的线程和之前不一定是同一个线程。...但是也就解决方案,就是通过其他线程池,专门处理数据库请求并等待返回进行回,也就是业务线程池 A 将数据库 BIO 请求交给线程池B处理,读取完数据之后,再交给 A 执行剩下的业务逻辑。.../dbThreadPool用来处理阻塞的数据库IO }, dbThreadPool).thenComposeAsync(result -> { //springDeferredResult...来实现异步回写入结果返回 deferredResult.setResult(result); }); return deferredResult; } WebFlux 也可以使用阻塞JDBC

64360
领券