Spring Boot 性能优化

ES与Spring Boot整合&性能优化 1、前言 首先说明,springboot和elasticsearch的兼容性并不是很好,主要是因为elasticsearch的版本之间API差异太大。向后兼容性不强,特别是es6和es7,差异巨大!所以大家一定要注意自己服务器es的版本和springboot的依赖坐标版本对应,如我本地es版本为7,所以我导入的依赖坐标如下: es7后操作模板使用ElasticsearchRestTemplate,已经集成了高级API! 2、集成准备工作 2.1 依赖坐标 <dependenc... 阅读详情
 Spring 框架给企业软件开发者提供了常见问题的通用解决方案,包括那些在未来开发中没有意识到的问题。但是,它构建的 J2EE 项目变得越来越臃肿,逐渐被 Spring Boot 所替代。Spring Boot 让我们创建和运行项目变得更为迅速,现在已经有越来越多的人使用它。我们已经在几个项目中使用了 Spring Boot ,今天我们就来一起讨论一下如何改进 Spring Boot 应用的性能。

首先,从之前我在开发中遇到的一个问题说起。在一次查看项目运行日志的时候,我偶然发现了一个问题,日志里显示这个项目总是加载 Velocity 模板引擎,但实际上这个项目是一个没有 web 页面的 REST Service 项目。于是我花了一点时间去寻找产生这个问题的原因,以及如何改进 Spring Boot 应用的性能。在查找了相关的资料后,我得出的结论如下:


组件自动扫描带来的问题

默认情况下,我们会使用 @SpringBootApplication 注解来自动获取的应用的配置信息,但这样也会给应用带来一些副作用。使用这个注解后,会触发自动配置( auto-configuration )和 组件扫描 ( component scanning ),这跟使用 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 三个注解的作用是一样的。这样做给开发带来方便的同时,也会有两方面的影响:

1、会导致项目启动时间变长。当启动一个大的应用程序,或将做大量的集成测试启动应用程序时,影响会特别明显。

2、会加载一些不需要的多余的实例(beans)。

3、会增加 CPU 消耗。

针对以上两个情况,我们可以移除 @SpringBootApplication 和 @ComponentScan 两个注解来禁用组件自动扫描,然后在我们需要的 bean 上进行显式配置:

// 移除 @SpringBootApplication and @ComponentScan, 用 @EnableAutoConfiguration 来替代
@Configuration
@EnableAutoConfiguration
public class SampleWebUiApplication {

    // ...

    // 用 @Bean 注解明确显式配置,以便被 Spring 扫描到
    @Bean
    public MessageController messageController(MessageRepository messageRepository) {
        return new MessageController(messageRepository);
    }


如何避免组件自动扫描带来的问题

我们在上面提到,@SpringBootApplication 注解的作用跟 @EnableAutoConfiguration 注解的作用是相当的,那就意味着它也能带来上述的三个问题。要避免这些问题,我们就要知道我们需要的组件列表是哪些,可以用 -Ddebug 的方式来帮助我们明确地定位:

mvn spring-boot:run -Ddebug
…
=========================
AUTO-CONFIGURATION REPORT
=========================


Positive matches:
-----------------

   DispatcherServletAutoConfiguration
      - @ConditionalOnClass classes found: org.springframework.web.servlet.DispatcherServlet (OnClassCondition)
      - found web application StandardServletEnvironment (OnWebApplicationCondition)

...

接着拷贝 Positive matches 中列出的信息:

DispatcherServletAutoConfiguration
EmbeddedServletContainerAutoConfiguration
ErrorMvcAutoConfiguration
HttpEncodingAutoConfiguration
HttpMessageConvertersAutoConfiguration
JacksonAutoConfiguration
JmxAutoConfiguration
MultipartAutoConfiguration
ServerPropertiesAutoConfiguration
PropertyPlaceholderAutoConfiguration
ThymeleafAutoConfiguration
WebMvcAutoConfiguration
WebSocketAutoConfiguration

然后来更新项目配置,显式地引入这些组件,引入之后,再运行一下应用确保没有错误发生:

@Configuration
@Import({
        DispatcherServletAutoConfiguration.class,
        EmbeddedServletContainerAutoConfiguration.class,
        ErrorMvcAutoConfiguration.class,
        HttpEncodingAutoConfiguration.class,
        HttpMessageConvertersAutoConfiguration.class,
        JacksonAutoConfiguration.class,
        JmxAutoConfiguration.class,
        MultipartAutoConfiguration.class,
        ServerPropertiesAutoConfiguration.class,
        PropertyPlaceholderAutoConfiguration.class,
        ThymeleafAutoConfiguration.class,
        WebMvcAutoConfiguration.class,
        WebSocketAutoConfiguration.class,
})
public class SampleWebUiApplication {

在上面的代码中,我们可以删掉我们不需要的组件信息,来提高应用的性能,比如在我的项目中,不需要 JMX 和 WebSocket 功能,我就删掉了它们。删掉之后,再次运行项目,确保一切正常。


将Servlet容器变成Undertow

默认情况下,Spring Boot 使用 Tomcat 来作为内嵌的 Servlet 容器。我们可以启动项目,然后用 VisualVM 或者 JConsole 来查看应用所占的内存情况:

以上是我使用 Spring Boot 的默认方式启动应用后,用 VisualVM 监控到的内存的占用情况:堆内存占用 110M,16 个线程被开启。

可以将 Web 服务器切换到 Undertow 来提高应用性能。Undertow 是一个采用 Java 开发的灵活的高性能 Web 服务器,提供包括阻塞和基于 NIO 的非堵塞机制。Undertow 是红帽公司的开源产品,是 Wildfly 默认的 Web 服务器。首先,从依赖信息里移除 Tomcat 配置:

<exclusions>
        <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
</exclusions>

然后添加 Undertow:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>

启动项目后,用 VisualVM 监控到的信息显示:堆内存占用 90M,13个线程被开启。


总结

这些都是我们在项目开发中使用到的一些优化 Spring
Boot 应用的小技巧,对于大的应用性能的提高还是很明显的。大家可以尝试一下,然后告诉我们你的测试结果。

最后,附上代码,大家可以去这里下载:spring-boot-performance。

文中大部分内容参考英国一个架构师的博客 和DZone 近期发布的文章,在此感谢两位大牛。参考文章及链接:

(1)Spring Boot 性能优化:Spring Boot Performance;

(2)Spring Boot 内存优化:Spring Boot Memory Performance。

(3)https://www.techempower.com/benchmarks/;

(4)Spring 应用程序优化:Optimizing Spring Framework for App Engine Applications。

Spring Boot网站性能优化全解析 另外,Arch Linux下启用 noatime 和 nodiratime 选项减少磁盘访问,CentOS Linux下配置防火墙规则减少不必要连接和过滤,禁用不必要服务减少资源消耗。此外,还需设置合理JVM堆内存大小,配置GC日志分析垃圾回收情况,使用JVM工具监控性能,调整垃圾回收相关参数,开启JVM压缩指针减少堆内存占用,根据并发情况调整JVM线程池大小。配置持久化 /etc/sysctl.d/99-tuning.conf /etc/sysctl.conf。一、Spring Boot应用层优化。 阅读详情

相关推荐

Spring Boot 项目中的性能优化

Spring Boot项目的性能优化是一个综合性的问题,需要从数据库、缓存、JVM、网络通信、异步处理、并发优化以及代码和架构等多个方面入手。通过合理的配置和代码优化,可以显著提升应用的性能和稳定性。

wjianwei666的专栏 1246

Spring Boot (Web 篇):支持JSP

  目录 前言 在pom.xml加入相关依赖 配置application.properties 创建JSP页面 Controller层 JSP页面 项目启动 第一种方式,SpringBoot直接启动(内置集成tomcat) 浏览器访问 第二种方式,打包成部署的 war 包(外置tomcat) 在pom.xml加入相关依赖 配置启动项 在pom.xml加入相关依赖 添加...

Soinice的博客 1313

Java领域Spring Boot的性能优化技巧

Spring Boot凭借其简化配置、快速开发等特性,在Java开发领域得到了广泛应用。然而,随着应用规模的扩大和用户数量的增加,性能问题逐渐凸显。本文的目的是系统地介绍Spring Boot性能优化的技巧和方法,涵盖从代码层面到服务器配置层面的多个方面。范围包括对Spring Boot核心组件的性能调优、数据库交互优化、缓存机制的应用、服务器性能配置等内容。本文将按照以下结构进行组织:首先介绍核心概念与联系,让读者对Spring Boot性能相关的概念有清晰的认识;

Java大师兄的博客 818

springboot加载jsp的问题

springboot虽然简化了配置文件,但是出了问题也不好去查原因了,springboot中加载jsp,实际上就是springmvc加载jsp。 首先不管是maven还是gradle,先引入两个依赖: compile 'org.apache.tomcat.embed:tomcat-embed-jasper' compile 'javax.servlet:jstl' 注意启动容器为 tom

弓一的博客 6139

Spring Boot与Java的性能优化秘籍

在当今数字化时代,软件系统的性能至关重要。Spring Boot作为一款广泛应用的Java开发框架,它简化了Spring应用的开发过程,但在处理大规模数据和高并发请求时,性能问题可能会逐渐凸显。Java作为Spring Boot的基础编程语言,其性能也会直接影响到整个应用的性能。因此,本文章的目的在于深入探讨Spring Boot与Java的性能优化方法,涵盖从代码层面到系统层面的多个方面,帮助开发者提升应用的响应速度、吞吐量和资源利用率。

Java大师兄的博客 876

oneapmjava探针

oneapm的java探针,支持java1.6-1.8版.

为什么要放弃 JSP ?

作者 |水车链接 |www.cnblogs.com/xuange306前言以前的项目大多数都是Java程序猿又当爹又当妈,既搞前,又搞后端。随着时代的发展,渐渐的许多...

公众号:Java后端 1260

详解SpringBoot 添加对JSP的支持(附常见坑点)

主要介绍了详解SpringBoot 添加对JSP的支持(附常见坑点),非常具有实用价值,需要的朋友可以参考下

IDEA中运行SpringBoot+JSP项目,JSP页面无法访问问题

一、先将Maven 打包install Build一下,如果不成功,那就是Maven的问题 二、如果Maven没有问题 第一种解决方案: 使用命令端启动 第二种解决方案 自己写一个加入如下配置类 (1)如果SringBoot 1.X版本 @Bean public EmbeddedServletContainerFactory embeddedServletConta...

Leavonson的博客 888

Win11系统下Abaqus 2025子程序开发环境一站式配置指南

本文详细介绍了在Win11系统下配置Abaqus 2025子程序开发环境的完整流程,包括VS2022和Intel oneAPI的安装与优化,以及Abaqus 2025的目录规划与环境联调。通过避坑指南和实战案例,帮助用户高效完成开发环境配置,避免常见错误,提升工作效率。

weixin_28717431的博客 332

保姆级教程:从Salmon输出到DESeq2,搞定RNA-seq表达矩阵标准化与下游分析准备

本文提供从Salmon输出到DESeq2标准化的RNA-seq数据分析全流程指南,详细解析表达矩阵构建、标准化方法选择及下游分析准备。重点介绍如何将Salmon定量结果转换为DESeq2兼容格式,包括TPM与原始计数的处理技巧,以及常见问题排查方法,帮助研究人员高效完成RNA-seq数据分析。

weixin_42699679的博客 303

Spring Boot 缓存与性能优化

摘要 本文介绍了Spring Boot中缓存与性能优化的核心概念及实践方法。缓存作为临时存储区,能有效减少数据库压力、提升响应速度和吞吐量,常见类型包括内存缓存、分布式缓存和浏览器缓存。性能优化则通过缓存优化、数据库优化、代码优化等手段提升系统性能和用户体验。文章详细演示了Spring Boot集成Spring Cache的步骤,包括依赖配置、实体类定义、Repository接口实现等,并通过模拟数据库查询展示了缓存的实际应用效果。

编程世界如山海,探索不止。 8478

软件工程案例教程·韩万江【课后习题】

!!!!

weixin_57858263的博客 6416

Spring Boot性能优化详解

Spring Boot性能优化需从多维度入手,包括应用层、数据库、缓存、JVM和网络优化。关键指标涉及响应时间、吞吐量、资源利用率和错误率。JVM优化可通过参数调整(如-Xms/Xmx)、垃圾回收策略(G1GC)和内存管理(对象池)实现。数据库优化重点在于连接池配置(HikariCP)、查询优化(索引、分页、批量操作)和索引设计(复合/覆盖索引)。通过JMeter等工具进行性能测试,结合代码级优化(如并发集合、原子变量)和架构调整,可全面提升应用性能。

程序员大凯的博客 573

AOSP14 Launcher3——手势上滑关键类AbsSwipeHandler解析

通过精密的事件监听、状态管理和对系统动画 API 及 Launcher 内部组件的协调,实现了复杂而流畅的手势导航体验。它的抽象设计允许子类(如。是 Quickstep (Launcher3 的手势导航实现) 中处理。的核心逻辑抽象基类。这个非常核心且复杂的类。)定制特定的回家动画逻辑。好的,我们来深入分析。

Micheal_Yang's Blog 1519

性能优化 - 高级进阶: Spring Boot服务性能优化

性能优化实践指南:监控与剖析 本文系统介绍了性能优化的关键前置步骤——指标监控与性能剖析。通过集成Prometheus实现指标采集(包括JVM、缓存命中率等核心指标),并配合Grafana可视化监控。同时详细讲解了async-profiler工具的使用方法,包括火焰图生成方式。文章强调"数据驱动优化"理念,指出必须先建立完善的监控体系,获取真实运行数据后再针对性优化,避免盲目调整。配套的系列文章还涵盖了从理论到实践的完整性能优化知识体系,包括七类技术手段、诊断方法和11种接口优化方案等。

小工匠 2225

华为灵衢UB总线介绍

华为发布"灵衢"(UB)超节点互联协议,旨在构建支持AI大模型计算的基础设施。该协议采用统一内存语义和对等架构,使设备可直接访问远程内存,实现资源池化。技术突破包括2.1微秒超低时延和TB级带宽,支持64节点、52万张昇腾卡的集群互联。相比传统RDMA,"灵衢"更注重系统级资源调度,而非单纯数据传输。华为开放技术规范,推动生态建设,已有厂商开发兼容IP核。"灵衢"可适应x86、RISC-V等架构,未来将扩展至百万卡规模集群。

技术引领业务创新 4416

【Spring Boot性能优化技巧】

以上是一些基本的性能优化建议,实际应用中可能需要根据具体情况进行更细致的分析和调整。随着技术的不断发展,持续学习和实践是每个开发者的必修课。Spring Boot以其简化配置和快速开发的特点,已经成为Java开发中的主流框架。然而,在面对高并发和大数据量的场景时,性能优化就显得尤为重要。使用SpringSession或Spring Security的Session管理功能,配置合理的Session策略,减少内存消耗。根据应用需求配置合适的线程池,避免默认线程池带来的性能问题。

qq_33545255的博客 658

Linux Kernel入门到精通系列讲解(RV-Kernel 篇) 5.6 在kernel 中实现系统复位和系统关机驱动

上一章节`Qemu`篇我们已经实现了我们`SOC`的`power reset`和 `power down` 寄存器,本章节我们就在`Linux driver`中去实现它

DSMGUOGUO的博客 541

02-Redis 核心特性与数据结构详解:揭秘高性能的技术内核

本文深度拆解 Redis 高性能的技术内核:揭秘其凭“内存存储 + C 语言开发” 实现微秒级延迟、10 万 + QPS 的性能优势;详解 5 种基础数据类型(String/Hash 等)与 4 种扩展数据类型(Stream/Geospatial 等)的特性及场景;还介绍多语言支持、RDB/AOF 持久化、主从复制 / 哨兵 / 集群等高可用方案,助读者掌握 Redis 技术核心与实践逻辑。

蜗牛老师,专注编程领域 995

Spring Boot性能优化案例

记住,优化通常是一个迭代过程,你应该使用分析工具和监控来衡量变化的影响,以确保你在启动时间和内存使用方面取得了预期的改进。spring.main.lazy-initialization=true`,可以减少内存使用,因为只有在需要时才会加载beans。- 禁用不必要的自动配置可以减少启动时间。- 通过使用`@Lazy`注解或在`application.properties`中设置`- 只包含应用程序真正需要的依赖,使用Spring Boot的`- 确保使用的是包含性能改进的兼容且更新的JVM版本。

心猿意码 898

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Spring Boot 性能优化与监控:利用 Actuator 进行应用监控、日志分析与性能优化

是 Spring Boot 提供的一个功能模块,用于监控和管理 Spring Boot 应用。它为开发者提供了一些生产环境下非常实用的功能,包括健康检查、性能指标、环境信息、日志管理等。Spring Boot Actuator 的核心目标是让应用的运维和监控变得更简单。它通过一组端点(EndPoints)提供了应用的各种运行时信息,开发者可以通过这些端点快速了解应用的健康状况、性能瓶颈、以及系统负载等信息,帮助开发者快速排查问题和进行性能优化。

一碗黄焖鸡三碗米饭的博客 1648

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Spring Boot 原理与性能优化实战

fill:#333;color:#333;color:#333;fill:none;常见坑总结JSON 时间格式统一大文件上传 OOM 风险数据库连接池泄漏JSON 时间格式spring:jackson:限制上传文件大小数据库连接池配置 HikariCP开发快:自动配置 + Starter部署快:jar 包一键启动生态强:丰富的扩展启动快:延迟加载、限制扫描、禁用无用配置内存稳:合理 JVM 参数、线程池优化接口快:缓存、批量 SQL、异步任务监控全。

波波烤鸭的博客 1075

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Spring Boot性能优化策略

本文将针对标题《技术总结:Spring Boot性能优化策略》进行深入探讨,总结一系列有效的性能优化策略,帮助开发者提升Spring Boot应用的性能。为了提升Spring Boot应用的性能,需要从配置优化、代码优化、容器配置优化等多个方面入手,同时还需要关注扩展性与稳定性优化等方面。通过合理的性能优化策略,可以有效地提升Spring Boot应用的性能,满足企业的业务需求。(3)关注业务逻辑:关注业务逻辑的处理过程,优化数据流处理和业务规则的处理逻辑,减少无效的计算和不必要的IO操作。

2501_90410679的博客 214
上一篇: Spring Boot 部署与服务配置
下一篇: Spring Data Redis(Redis Cluster)
架构师的清醒
博客等级 码龄14年 291粉丝 397原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值