springboot项目启动慢的问题排查方式
作者:JohnJary 发布时间:2023-06-19 18:58:40
springboot项目启动慢的问题排查
springboot项目,随着时间的推移,启动耗时逐步增加,从几分钟慢慢的达到30多分钟,有点恐怖!
项目中用到技术:hibernate、redis、kafka、线程池等,启动慢的环境使用的是mysql数据库!
1.最开始查看的启动日志,是在输出:
org.hibernate.id.UUIDHexGenerator : HHH000409: Using org.hibernate.id.UUIDHexGenerator which does not generate IETF RFC 4122 compliant UUID values; consider using org.hibernate.id.UUIDGenerator instead
后停滞,等相当长时间后继续输出:
o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'taskExecutor'
怀疑是创建kafka、线程池等导致耗时,通过去掉相关对象创建,耗时仍无改观!
2. 启动项目,打印日志级别改为debug,查看更详细信息
发现:大量的alter table 增加外键!奇怪,不是第一次启动项目,mysql库中的表早已创建好,为什么每次都要重复alter?
查看mysql相关表发现无外键,表引擎为MyISAM!此引擎不支持外键!
在使用hibernate自动创建表时,mysql中建表使用的MyISAM引擎,查看配置:
dialect
:应使用org.hibernate.dialect.MySQL5InnoDBDialect
这就解释了:为什么orcle环境下没有此问题,而mysql就有,其随着时间的推移,表中数据逐渐增加,在启动时alter table耗时严重!
如何优化SpringBoot的项目的启动速度
日常开发SpringBoot项目启动类都用@SpringBootApplication
实际上它是下面三个注解的组合
@EnableAutoConfiguration
: enable Spring Boot's auto-configuration mechanism@ComponentScan
: enable@Component
scan on the package where the application is located (see the best practices)@Configuration
: allow to register extra beans in the context or import additional configuration classes
启动慢往往跟@ComponentScan和@EnableAutoConfiguration加载的内容太多有关,一种方法是不用这两个注解,通过@import注解精确指定要加载扫描的类,但要加载的类多时又很麻烦,
可以用@SpringBootApplication注解下面的属性
exclude
: Exclude the list of classes from the auto configuration.excludeNames
: Exclude the list of fully qualified class names from the auto configuration. This parameter added since spring boot 1.3.0.scanBasePackageClasses
: Provide the list of classes that has to be applied for the @ComponentScan.scanBasePackages
Provide the list of packages that has to be applied for the @ComponentScan. This parameter added since spring boot 1.3.0.
另外,如果SpringBoot项目启动很慢,可能意味着你要重新拆分微服务。
来源:https://blog.csdn.net/Jerry_John/article/details/106354154


猜你喜欢
- Spring MVC 为开发者提供了方便的开发方式和丰富的功能。其中,HttpMessageConverter 是Spring MVC中非常
- 首先,定义TabHost的布局文件:<?xml version="1.0" encoding="utf-
- 首先假设你的应用程序配置文件如下:<?xml version="1.0" encoding="utf-8
- 在Excel中,可对单元格中的字符串设置多种不同样式,通常只需要获取到单元格直接设置样式即可,该方法设置的样式会应用于该单元格中的所有字符。
- 1、JDK:Java Development Kit,java开发工具包。http://www.oracle.com/technetwork
- 本文实例讲述了基于.net实现裁剪网站上传图片的方法。由于客户端Javascript不能操作文件,所以只能先上传图片再在服务器端剪切。1、上
- 实例如下:using System;using System.Linq.Expressions;class DynamicPredicate
- 前段时间做了一个Android会议管理系统,项目需求涉及到EditText的图文混排,如图: 在上图的”会议详情”中,需要支持文
- 这篇文章从系统源代码分析,讲述如何将程序创建的多媒体文件加入系统的媒体库,如何从媒体库删除,以及大多数程序开发者经常遇到的无法添加到媒体库的
- 前言Android Studio是Google开发的一款面向Android开发者的IDE,支持Windows、Mac、Linux等操作系统,
- 其实本没有没打算写这篇的,但还是要写一下写这篇博客的起因是因为,现在呆着的这家公司居然没有统一的API返回格式?,询问主管他居然告诉我用HT
- 本文实例讲述了Java实现指定线程执行顺序的三种方式。分享给大家供大家参考,具体如下:方法一:通过共享对象锁加上可见变量来实现。public
- SpringBoot默认的存放静态资源文件的位置是:注:SpringBoot中的src/main/resources/资源文件夹对应clas
- 前言WebView(网络视图)在Andorid中就是用来显示网页的,下面我们来一起看看它是如何使用的。一、基本使用1.声明权限,WebVie
- Unity是不识别Gif格式图的,需要我们使用c#将gif里多帧图转化为Texture2D格式。需要使用System.Drawing.dll
- 本文实例为大家分享Winform版计算器的具体实现方法,供大家参考,具体内容如下前台页面设计后台代码实现using System;using
- BeanPostProcessor 的接口定义,可以实现提供自己的实例化逻辑,依赖解析逻辑等,也可以以后在Spring容器实例化完毕,配置和
- Android中可以创建三种对话框、确定取消对话框、单选对话框、多选对话框android中的确定取消对话框演示示例Android中使用单选对
- 一、快速生成main输入psvm二、快速生成System.out.print使用sout三、文件保存IDEA是自动保存的,不需要我们去Ctr
- 1.添加引用工具箱---右键---选择项--COM组件--Adobe PDF Reader2.使用方法OpenFileDialog open