千家信息网

怎么优化spring boot应用

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,本文小编为大家详细介绍"怎么优化spring boot应用",内容详细,步骤清晰,细节处理妥当,希望这篇"怎么优化spring boot应用"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来
千家信息网最后更新 2026年10月31日怎么优化spring boot应用

本文小编为大家详细介绍"怎么优化spring boot应用",内容详细,步骤清晰,细节处理妥当,希望这篇"怎么优化spring boot应用"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

    前言

    taptap-developer是一个spring boot框架驱动的纯Grpc服务,所以,只用了四步,移除了web和spring cloud相关的模块后,启动速度就稳稳的保持在了6s内。除了启动速度提升外,在服务待机状态下,内存锐减了50%左右,从500M左右的内存占用,缩减到了250M不到。

    分析日志

    日志是一个应用的门面,在未深入了解一个应用的架构前,通过启动的日志输出基本可以分析出这个应用的大概的技术构成。在分析日志之前,在强调一点,这个应用是一个纯Grpc的服务。如上图贴出的日志,是未优化前的系统日志输出,从上到下有四个红色箭头指向,是本次日志分析的关键信息,下面就这四个关键信息,分别分析下。然后总结出常见的优化方法

    优化点一:关于SPRING DATA REPOSITORY SCANNING

    Spring Data repository是一个高度抽象的数据访问层接口,常见的实现有redis、jdbc、jpa、MongoDB、elasticsearch等等。实现一个Spring-data-xxx包,需要实现

    org.springframework.data.repository.core.support.RepositoryFactorySupport抽象类

    然后在!/META-INF/spring.factories文件中定义好实现类。spring容器启动时,会扫描加载factories的信息。如果一个项目里有被扫描到有多个spring-data-xxx的实现,启动时日志就会打印

    Multiple Spring Data modules found, entering strict repository configuration mode!

    优化:看到这个日志,我们就需要检查下项目中是否用到了这些功能,比如引入了spring-data-redis,其实只用到了其携带的jedis,而且jedis实例可能还是自己实例化的,这个时候就可以禁用repository的功能。参考配置如下:

    spring.data.redis.repositories.enabled=false

    Spring Data repository有三种内置的初始化模式,分别对应如下:

    • DEFAULT:和Spring其他Bean一样,在容器上下文加载时就初始化

    • DEFERRED:惰性加载,容器上下文启动完成后开始初始化

    • LAZY:惰性加载,并且延迟注入,容器上下文启动完成接收第一个请求时开始初始化
      如日志输出:Bootstrapping Spring Data repositories in DEFAULT mode,默认是随容器启动就开始初始化的

    优化:这里可以根据业务特点,选择延迟加载,

    参考配置spring.data.jpa.repositories.bootstrap-mode=lazy

    Spring Data repository会扫描项目中的实现了repository接口的类,默认情况下会盲扫所有的jar包,

    日志输出:Finished Spring Data repository scanning in 148ms. Found 0 repository interfaces.

    打印出了扫描repository接口的耗时情况。

    优化:

    这里可以通过@EnableRedisRepositories(basePackages = "com.taptap")指定扫描的路径

    可以显著提升扫描加载的速度

    优化点二:关于WEBAPPLICATIONCONTEXT

    在spring中,WebApplicationContext是ApplicationContext的增强,由spring-web-mvc实现,增加了servlet、session等web相关的内容。

    从日志Initializing Spring embedded WebApplicationContext可以看出,我们初始化了一个web容器,而纯Grpc服务用不到Web的容器上下文,所以移除如下依赖即可

    优化:

    移除implementation('org.springframework.boot:spring-boot-starter-web')

    优化点三:关于SERVLET容器

    spring-web-mvc是基于java web标准servlet设计架构的。而servlet是由servlet容器来驱动的,常见的servlet有tocmat、jetty、undertow等。从日志中可看出,我们启动了一个8081的servlet容器。这个不应该出现在纯Grpc的服务中,所以,直接移除即可。

    优化:

    移除implementation 'org.springframework.boot:spring-boot-starter-undertow'

    优化点四:关于ARCHAIUS配置组件

    从最后一个箭头指向的日志信息可以分析出,项目引入了archaius配置加载组件,所以项目在启动时,archaius会尝试去加载默认策略的配置源。而我们整体的技术栈,配置中心统一采用了apollo,所以可以直接移除,最后通过分析定位,archaius不是单独引入的,是随着spring-cloud-starter-netflix-hystrix一同引入,这个组件是spring-cloud-netflix微服务框架最常用的,但是在这边,目前所有的微服务都是直接注册到k8s容器的,所有服务的熔断、限流、负载均衡都下沉到了容器基数设施平台,所以应用层面虽然引入了这个包,其实没有实际作用,所以最后移除spring cloud相关组件

    优化:

    移除implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'和

    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-hystrix'组件、

    附优化后的日志输出:

    系统资源的变化

    优化前的

    优化后的

    最后,基于资源监控图,从三个维度总结下,优化后的资源占用情况:

    资源名称优化前优化后
    内存500M左右250M左右
    总线程数10778
    装载类1292210041

    读到这里,这篇"怎么优化spring boot应用"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

    日志 容器 应用 服务 分析 配置 组件 项目 输出 上下 上下文 信息 资源 内存 内容 常见 情况 接口 文章 速度 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网金融科技创新 互联网科技logo设计 互联网科技视频素材 华脉科技工业互联网产品 互联网科技公司招聘 安控科技rtu产品工业互联网 汽车互联网创新科技园 南平创想时代互联网科技有限公司 深圳育鹏互联网科技有限公司招聘 区块链结合互联网科技 黑科技 体验场景 互联网大会 上海钢联属于互联网科技股吗 广东工业互联网大赛深圳学泰科技 中天科技中国工业互联网 互联网与数字科技关系 半导体行业属于互联网高科技类吗 南京一网一红互联网科技有限公司 上海万顺科技互联网有限公司招聘 互联网科技大会大佬 广东猫王互联网科技有限公司电话 互联网最新的科技 致聘互联网科技 广西互联网科技公司 伴你行互联网科技有限公司 猫创互联网科技 互联网科技股午盘股票涨跌 新华互联网科技2019 陕西云淼互联网科技公司 三亚科技创新互联网基地 杭州融税互联网科技有限公司
    0