Java 同一请求的不同执行时间

Java 同一请求的不同执行时间,java,spring,hibernate,jpa,spring-data,Java,Spring,Hibernate,Jpa,Spring Data,我正在使用hibernate,spring数据jpa和querydsl 当我第一次连接到索引页时,我手动计算所有repository.findXXX()语句的查询时间。这些时间通常约为5秒,但当我刷新页面时,它们只需1秒即可运行 有人能解释一下这种区别吗 很可能数据库缓存了您的查询,因此第二次运行时会更快 要使Hibernate缓存查询,您需要: 使用查询缓存设置二级缓存: <prop key="hibernate.cache.use_second_level_cache">tru

我正在使用
hibernate
spring数据jpa
querydsl

当我第一次连接到索引页时,我手动计算所有
repository.findXXX()
语句的查询时间。这些时间通常约为5秒,但当我刷新页面时,它们只需1秒即可运行

有人能解释一下这种区别吗

  • 很可能数据库缓存了您的查询,因此第二次运行时会更快

  • 要使Hibernate缓存查询,您需要:

    • 使用查询缓存设置二级缓存:

      <prop key="hibernate.cache.use_second_level_cache">true</prop>
      <prop key="hibernate.cache.use_query_cache">true</prop>
      <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
      

  • 验证在首次访问索引页期间初始化的组件。其中之一可能是连接池。启用调试级日志。您能否解释更多,连接池的角色是什么?查看日志?连接池用于优化应用程序中的数据库访问。这里有更多详细信息-如果配置了hibernate_cfg.xml,请查看它是否是池连接?数据库(
    mysql
    )或hibernate缓存了我的查询?很可能是数据库。要使Hibernate缓存查询,您需要激活二级缓存,即查询缓存,并将查询标记为可缓存。
     List cats = session.createQuery("from MyEntity")
      .setCacheable(true)
      .list();