SpringBoot重启后,第一次请求接口请求慢的问题及解决

 更新时间:2024年05月21日 11:07:54   作者:影࿐ེ  
这篇文章主要介绍了SpringBoot重启后,第一次请求接口请求慢的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1、DispatcherServlet默认是懒加载

即工程启动的时候,Applicationcontext会将所有的bean加载到容器,但是DispatcherServlet是没有加载的,只有第一次访问的时候才会加载

场景一

DispatcherServlet懒加载情况,启动的时候如下图

只有一个ApplicationContext的初始化,此时并没有DispatcherServlet的初始化,接下来我们进行一次接口调用

如下图:

发现在进行接口调用的时候,才初始化了DispatcherServlet,接下来我们再进行一次接口调用

如下图:

此时,直接进行方法的调用和返回。

场景二

spring.mvc.servlet.load-on-startup=1

DispatcherServlet关闭懒加载,启动的时候如下图:

同时完成了ApplicationContext和DispatcherServlet的初始化,此时再进行接口调用,会发现即便是第一次调用,也直接进入了方法

如下图:

通过上述测试可知,通过配置 spring.mvc.servlet.load-on-startup=1 关闭DispatcherServlet懒加载

使第一次接口访问的时候直接进行方法的调用,提高速度

2、随机数生成慢的原因和解决方案

Java随机数生成依赖熵源(Entropy Source)

默认的阻塞型的 /dev/random熵源可能导致阻塞

而换一个非阻塞的 /dev/urandom的熵源就可以了

解决方法

  • 临时、方便

以这种方式运行jar包

java -Djava.security.egd=file:/dev/./urandom -jar XXX.jar XXX
  • 永久

进入你的JAVA_HOME的jre目录下找到并vim编辑这个文件:

$JAVA_HOME/jre/lib/security/java.security
  • 找到:
securerandom.source=file:/dev/random 这一行
  • 改之前:
securerandom.source=file:/dev/random
  • 改为:
securerandom.source=file:/dev/urandom

3、进行异步处理

提高整体的响应时间

4、加入缓存

例如热点数据的预加载等,提高响应时间

5、工程启动之后

就进行一次访问

@Slf4j
@Configuration
public class LoadDatabase {

    @Bean
    CommandLineRunner initController(RestTemplate restTemplate) {
        return args -> {
            log.info("REQUEST " + restTemplate.execute("http://127.0.0.1:9999/t1", HttpMethod.GET, null, null));
        };
    }
}


总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 利用Java实现简单的词法分析器实例代码

    利用Java实现简单的词法分析器实例代码

    众所周知编译原理中的词法分析算是很重要的一个部分,原理比较简单,不过网上大部分都是用C语言或者C++来编写,因为最近在学习Java,故用Java语言实现了简单的词法分析器。感兴趣的朋友们可以参考借鉴,下面来一起看看吧。
    2016-12-12
  • Java数据结构之实现哈希表的分离链接法

    Java数据结构之实现哈希表的分离链接法

    今天给大家带来的是关于Java数据结构的相关知识,文章围绕着Java哈希表的分离链接法展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Mybatis如何按顺序查询出对应的数据字段

    Mybatis如何按顺序查询出对应的数据字段

    这篇文章主要介绍了Mybatis如何按顺序查询出对应的数据字段,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 详解用Spring Boot Admin来监控我们的微服务

    详解用Spring Boot Admin来监控我们的微服务

    这篇文章主要介绍了用Spring Boot Admin来监控我们的微服务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Java多条件判断场景中规则执行器的设计

    Java多条件判断场景中规则执行器的设计

    近日在公司领到一个小需求,需要对之前已有的试用用户申请规则进行拓展。本文去掉if 判断,试试用一个规则执行器来替代它,感兴趣的可以了解一下
    2021-06-06
  • Java使用FutureTask实现预加载的示例详解

    Java使用FutureTask实现预加载的示例详解

    基于FutureTask的特性,通常可以使用FutureTask做一些预加载工作,比如一些时间较长的计算等,本文就来和大家讲讲具体实现方法吧,感兴趣的可以了解一下
    2023-06-06
  • Java生成指定范围内的一个随机整数2种方式

    Java生成指定范围内的一个随机整数2种方式

    本文主要介绍了Java生成指定范围内的一个随机整数2种方式,主要使用Math.random()和Random.nextInt()这两种,具有一定的参考价值,感兴趣的可以了解一下
    2023-04-04
  • springboot application.yml使用@@pom文件配置问题

    springboot application.yml使用@@pom文件配置问题

    这篇文章主要介绍了springboot application.yml使用@@pom文件配置问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Java中Http连接的两种方式(小结)

    Java中Http连接的两种方式(小结)

    这篇文章主要介绍了Java中Http连接的两种方式(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • java 最新Xss攻击与防护(全方位360°详解)

    java 最新Xss攻击与防护(全方位360°详解)

    这篇文章主要介绍了java 最新Xss攻击与防护(全方位360°详解),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01

最新评论