sringboot 启动优化

文章提供了优化SpringBoot应用启动时间的几种方法,包括启用延迟初始化,关闭JMX服务,禁用Spring的ContextIndexer,实现惰性初始化,以及调整JVM参数如关闭分层编译和字节码验证。此外,还提及了SpringNative作为更快启动的解决方案。
摘要由CSDN通过智能技术生成

1.延迟初始化(可能第一次启动会慢)

spring.main.lazy-initialization=true

2.关闭JMX

spring.jmx.enabled=false

在这里插入图片描述

3.Spring5自带Context Indexer

引入包,并在启动类加入 @Indexed
(测试好像会影响swagger)

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context-indexer</artifactId>
  <optional>true</optional>
</dependency>

在这里插入图片描述

5.惰性初始化

/**
 * 惰性初始化
 */
@Configuration
public class LazyInitBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        for (String beanName : beanFactory.getBeanDefinitionNames()) {
            beanFactory.getBeanDefinition(beanName).setLazyInit(true);
        }
    }
}

6.最后是JVM调优(1.关闭分层编译 2.关闭字节码验证)

// -XX:TieredStopAtLevel=1 这个使用需谨慎!
-XX:TieredStopAtLevel=1 -noverify

好了,快去试试吧。
另外有兴趣可研究 Sring Native 毫秒启动sringboot项目,这个更叼!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SpringBoot 是一个非常常用的 Java 应用框架,提供了许多便于开发的功能,但在启动时却常常存在较长的启动时间。在一些场景下要求应用启动速度较快,如在云原生应用中,快速启动可以提高资源的利用率和性能,因此需要对 SpringBoot 启动速度进行优化。 1. 确认依赖 在建立 SpringBoot 项目时,通常使用的是 Spring Initializr 工具,在选择依赖时,需要仔细考虑依赖的必要性,不必要的依赖会增加项目的启动时间。可以使用 mvn dependency:tree 命令来查看项目的依赖, 并考虑去掉不必要的依赖。 2. 开启 AOT 模式 AOT( Ahead of Time )模式将应用程序的字节码转换成机器码,在启动时直接执行机器码,减少了 JIT 编译的时间,从而加快了启动速度。可以使用 Spring Native 框架实现 AOT 编译,需注意的是,Spring Native 目前仅支持在 Linux 和 Mac OS 系统上构建应用,并要求应用需要使用 GraalVM 的版本。 3. 使用懒加载 在启动 SpringBoot 应用时,通常会创建许多 bean,这些 bean 可能与应用程序的当前请求无关。为了优化启动速度,可以将这些 bean 的创建延迟到第一次使用时再进行创建。这可以通过在 bean 上使用 @Lazy 注解或在配置文件中添加 spring.main.lazy-initialization=true 来实现。 4. 减少自动配置的数量 在 SpringBoot 项目中,通常会有许多自动配置类,在启动Spring 会扫描所有装配件以构建相应的 bean。通常我们只使用少量的自动配置类,因此可以通过在配置文件中添加 spring.autoconfigure.exclude 来排除一些不必要的自动配置类,减少启动时间。 5. 启用并发初始化 Spring 5.0 版本默认支持并行初始化的功能,可以同时初始化 bean,从而减少启动时间。如果使用的是 Spring 4.x 版本,可以使用 spring.parallel.init.enabled=true 属性来开启并行初始化。 在实际应用中,可能还有其他需要考虑的因素,如数据库连接池的配置、缓存的使用,通过对以上几个方面的优化,可以显著地降低 SpringBoot 应用的启动时间,提高应用的性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值