`
ahua186186
  • 浏览: 554189 次
  • 性别: 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());
  }
}


分享到:
评论

相关推荐

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

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

    看透springMvc源代码分析与实践

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

    Spring注解驱动开发实战-springMVC

    ServletContext注册三大组件 springmvc-定制与接管SpringMVC springmvc-异步请求-返回Callable 异步请求-返回DeferredResult.

    SimpleWebChatSpring:简单的网络聊天

    检查:Java (TM) SE 运行时环境(构建 1.8.0_31-b13) apache-tomcat-8.0.21 url - http: // 本地主机: 8080 / SimpleWebChatSpring / 聊天控制器根据聊天记录的请求返回 DeferredResult,因此它不适用于 tomcat 6...

    AsyncTask 实现进度条

    AsyncTask 实现 进度条 网络下载进度条 例子

    springboot-scala-withswagger:Scala语言采用Spring-Boot结合Swagger的一个简单例子

    动作可以返回rx.Observable,就像返回Callable或DeferredResult一样,请参见RxJavaController 当控制器返回Callable / DeferredResult / Observable时,提供支持MDC值 先决条件 Maven / SBT 为什么使用maven而...

    reactive-spring-boot-starter

    Spring MVCReact式处理程序用于Reactor3和RxJava3集成的Spring Boot启动器设置专家< dependency>< groupId>io.iceflower... 在DeferredResult,ListenableFuture和REST Endpoint中下载。 io.reactivex.rxjava3.core.

    rxjava-spring-boot-starter:RxJava Spring MVC集成

    您不再需要使用阻塞操作或将值分配给DeferredResult或ListenableFuture,而可以声明REST端点返回Observable。 例: @RestController public static class InvoiceResource { @RequestMapping(method

    Java版水果管理系统源码-Team:为了我的个人发展

    DeferredResult 指南 | 贝尔东: 从 JUnit 4 迁移到 JUnit 5 | 贝尔东: 包 — 柜台 — Oracle 开发人员 — 中: Java 映射框架的性能 | 贝尔东: 用你的方式掌握 RxJava – Niklas Baudy – Medium: 更具表现力...

Global site tag (gtag.js) - Google Analytics