`
ahua186186
  • 浏览: 561946 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

解决了DeferredResult请求长时间占用数据库连接的问题

 
阅读更多
最近看了看开源项目appllo配置中心的源码,发现一个很有意思的东东:

(1)原理:由于使用了DeferredResult,根据Spring DispatcherServlet的默认逻辑,数据库连接只有在异步请求真正返回给客户端的时候才会释放回连接池

(2)应用场景:长连接时间很长,对于大部分请求可能都要数小时以上才会返回。在这么长的一段时间内一直占用着数据库连接是不合理的

长连接场景解决:

@Component
public class EntityManagerUtil extends EntityManagerFactoryAccessor {
  private static final Logger logger = LoggerFactory.getLogger(EntityManagerUtil.class);
  /**
   * close the entity manager.
   * Use it with caution! This is only intended for use with async request, which 
   * Spring won't close the entity manager until the async request is finished.
   */
  public void closeEntityManager() {
    EntityManagerHolder emHolder = (EntityManagerHolder)
        TransactionSynchronizationManager.getResource(getEntityManagerFactory());
    if (emHolder == null) {
      return;
    }
    logger.debug("Closing JPA EntityManager in EntityManagerUtil");
    EntityManagerFactoryUtils.closeEntityManager(emHolder.getEntityManager());
  }
}


分享到:
评论

相关推荐

    springmvc处理异步请求的示例

    在处理大量并发请求时,传统的同步处理方式可能会导致服务器资源被长时间占用,从而影响整体性能。为了解决这个问题,Spring MVC 从3.2版本开始引入了对Servlet 3.0异步请求的支持。 异步请求的主要优点在于,它...

    spring-async:具有DeferredResult的异步REST调用

    Spring中的异步REST结果 大部分Spring Boot REST教程... 但是,当您开始在生产中使用Spring Boot时,您很快就会发现,按照字母中的示例操作可能会导致性能问题。 在本文中,我将向您展示如何利用Spring的内置异步功能。

    《IT学习资料2》-Java web开发async机制学习.zip

    在Spring MVC中,可以通过配置`HandlerAdapter`和`AsyncHandlerInterceptor`来支持异步I/O,例如读取大文件或进行长时间的网络通信。这些示例可能演示了如何设置回调函数或者返回`DeferredResult`对象来处理异步操作...

    看透springMvc源代码分析与实践

    前言 第一篇 网站基础知识 第1章 网站架构及其演变过程2 1.1 软件的三大类型2 ...22.2.4 DeferredResult类型异步请求的处理过程及用法303 22.2.5 ListenableFuture类型异步请求的处理过程及用法305 22.3 小结309

    看透springMvc源代码分析与实践.pdf

    《看透SpringMVC源代码分析与实践》这本书旨在帮助读者深入理解SpringMVC这一流行的Java Web框架的工作原理,通过源代码分析与实践相结合的方式,提升开发者的技术深度和解决问题的能力。SpringMVC作为Spring框架的...

    详解spring mvc对异步请求的处理

    【Spring MVC 异步请求处理】 在现代Web应用程序中,为了提供更好的用户体验,异步请求处理变得至关重要。Spring MVC从3.2版本开始,引入了对异步请求的支持,这主要建立在Servlet 3.0及其以上版本的异步处理功能之...

    Spring注解驱动开发实战-springMVC

    // 长时间运行的任务 Thread.sleep(5000); return "Async Response"; }; } ``` 另外,异步请求也可以通过返回`DeferredResult`来处理。`DeferredResult`是另一种异步处理的方式,它允许我们在后续的某个时刻...

    spring boot高并发下耗时操作的实现方法

    spring boot高并发下耗时操作的...本文介绍了Spring Boot高并发下耗时操作的实现方法,通过使用DeferredResult实现异步处理,可以提高服务器的处理能力和可扩展性,对高并发场景下的耗时操作问题提供了一个解决方案。

    Spring_MVC_4.2.4_RELEASE_中文文档.pdf

    Spring MVC支持异步请求处理,允许控制器方法返回`DeferredResult`或使用`AsyncHandlerAdapter`来处理长时间运行的任务。 5. **处理器映射**: 处理器映射器负责找到适合处理特定请求的控制器方法。通过自定义...

    spring-mvc框架

    总结起来,Spring MVC作为Java Web开发中的重要工具,通过MVC模式提供了一整套优雅的解决方案,涵盖了从请求处理到视图渲染的全过程,同时提供了丰富的注解支持、数据绑定和验证、AOP、RESTful等特性,极大地提高了...

    springmvc3.2.0必须jar包

    Spring MVC 3.2.0引入了对异步请求处理的支持,允许控制器方法返回`DeferredResult`或`ListenableFuture`,这在处理长时间运行的任务时非常有用,因为它们可以避免阻塞线程并提高并发性。 2. **WebSocket支持**: ...

    看透SpringMVC源代码-分析与实践

    深入源码阅读能帮助开发者理解SpringMVC的运行机制,从而优化性能、解决疑难问题、定制功能,提高开发效率。通过实践,我们可以将理论知识应用于实际项目,提升软件开发的质量和效率。 本资料"看透SpringMVC源代码...

    手写SpringMVC 源码

    此外,这个过程也能帮助开发者更好地优化性能,解决实际开发中遇到的问题。 总之,手写SpringMVC源码是一个学习和提升的过程,它涵盖了软件设计原则、模式以及Java Web开发的关键技术。对于想要深入理解和掌握...

    笔记,3、Netty进阶和实战1

    在Spring MVC中,可以使用`DeferredResult`来实现异步处理,当后台处理完成后,`DeferredResult`会自动返回结果给客户端,从而实现服务器推送。 总结来说,本篇笔记主要讲述了Netty在处理UDP通信时的机制,包括单播...

    笔记,3、Netty进阶和实战2

    短轮询是通过定时器不断向服务器请求数据,而Comet则是一种基于HTTP长连接的服务器推技术,能够在浏览器端无插件的情况下实现实时信息推送。随着AJAX技术的普及,Comet得到了广泛应用,尤其在 Gmail 等服务中。在...

    看透springMvc源代码分析与实践,韩路彪著

    《看透SpringMVC源代码分析与实践》一书由韩路彪撰写,专注于解析SpringMVC这一核心的Java Web...通过阅读《看透SpringMVC源代码分析与实践》,开发者可以更深入地理解SpringMVC的精髓,提升开发效率和问题解决能力。

    Sring MVC3.0中文版和4.0英文版

    - **模型(Model)**:负责存储应用程序的数据,通常与数据库交互。 - **视图(View)**:负责渲染数据并展示给用户,如JSP、FreeMarker或Thymeleaf模板。 - **控制器(Controller)**:作为模型和视图之间的桥梁...

    详解Spring MVC的异步模式(高性能的关键)

    这使得开发人员能够构建更具可扩展性和高性能的Web应用程序,尤其适用于需要处理大量并发请求或涉及长时间运行任务的应用场景。因此,理解和熟练掌握Spring MVC的异步模式对于任何希望优化其Web应用程序性能的开发...

    service3.0与SpringMVC整合1

    在IT行业中,Spring框架是Java开发中的一个核心组件,它为构建企业级应用程序提供了全面的解决方案。SpringMVC是Spring框架的一部分,专用于处理Web应用的请求和响应。本篇文章将探讨如何在服务3.0环境中整合...

    MyBatis3.2.7和SpingMVC3.2.0

    4. 异步请求处理:支持异步请求处理,通过`@Async`注解和`DeferredResult`类,可以提高高并发场景下的性能。 5. 集成模板引擎:与Thymeleaf、FreeMarker等模板引擎的集成更加紧密,方便创建动态HTML页面。 6. 国际...

Global site tag (gtag.js) - Google Analytics