大数跨境
0
0

Spring Boot 性能调优:请做好这10项优化

Spring Boot 性能调优:请做好这10项优化 Spring全家桶实战案例
2025-03-12
0
导读:Spring Boot 性能调优:请做好这10项优化
Spring Boot 3实战案例合集》现已囊括超过100篇精选实战文章,并且此合集承诺将永久持续更新,为您带来最新的技术与实战案例。订阅用户将特别获赠文末中所有MD文档(详尽学习笔记),以及完整的项目源码,助您在学习道路上畅通无阻。

Spring Boot 3实战案例锦集》PDF电子书现已出炉!

🎉🎉我们精心打造的《Spring Boot 3实战案例锦集》PDF电子书现已正式完成,目前已经有105个案例,后续还将继续更新。文末有电子书目录。

💪💪永久更新承诺

我们郑重承诺,所有订阅合集的粉丝都将享受永久免费的后续更新服务。随着Spring相关技术的更新升级,我们的电子书也将持续更新,确保您始终掌握最前沿、最实用的技术知识。

💌💌如何获取
订阅我们的合集点我订阅,并通过私信联系我们,我们将第一时间将电子书发送给您。

现在就订阅合集




环境:SpringBoot3.4.0



1. 简介

Spring Boot 是目前最为流行的Java应用程序开发框架,但如果没有进行适当的优化,我们的应用可能会遇到以下问题:
❌启动速度慢 
❌ 内存消耗高 
❌ 数据库查询速度慢
❌ 高负载下响应时间长
本篇文章将介绍10个经过验证的性能调优技巧,以使应用程序更快、更高效。
2. 优化技巧

2.1 开启延迟初始化

延迟初始化会推迟bean的创建,直到它们被实际需要时,从而提高了启动时间。

spring:  main:    lazy-initialization: true

但是这会带来一个问题,如果你使用了一个不存在的Bean,那么只有在真正用到的时候才会发现错误。所以,在实际工作中尤其要注意这个问题。如下示例:

public class CCommonent {}@Componentpublic class Pack {  @Resource  private CCommonent cc ;}

当我们开启了延迟初始化,那么容器启动不会有错误,但是用的时候就会抛出错误了。

2.2 减少不必要的配置

Spring Boot默认会加载所有的自动配置。禁用不必要的自动配置可以加快启动速度并改善内存使用。

spring:  autoconfigure:    exclude=com.x.y.z.XxxAutoConfiguration

2.3 JVM内存优化配置

调整JVM设置可以防止内存泄漏并提升性能。

#建议将内存的初始大小和最大内存设置为一样;避免自动扩缩容而影响性能java -Xms2048m -Xmx2048m -jar pack_app.jar

启用 G1 垃圾收集器:

#java9开始默认java -XX:+UseG1GC -jar pack_app.jar

对于超低延迟应用程序,请使用 ZGC:

# java11开始引入,15正式发布稳定版java -XX:+UseZGC -jar pack_app.jar

2.4 优化数据库性能

  • 使用连接池

    这应该没有不使用连接池的吧?推荐使用Hikari,主打一个快。如下配置示例:

    spring:  datasource:    driverClassName: com.mysql.cj.jdbc.Driver    url: jdbc:mysql://localhost:3306/datajpa    username: root    password: root    type: com.zaxxer.hikari.HikariDataSource    hikari:      minimumIdle100      maximumPoolSize100      autoCommit: true      idleTimeout30000      poolName: packCP      maxLifetime1800000      connectionTimeout30000      connectionTestQuery: SELECT 1
  • 建立索引

    确保对经常查询的列创建索引,推荐创建联合索引。

    # 如下MySQLCREATE INDEX idx_product_name ON product (name);

有关SQL相关的优化请查看下面这篇文章:

提升性能:Java工程师必备的20条SQL最佳实践

2.5 使用缓存减少数据库调用

缓存将频繁访问的数据存储在内存中,从而减少数据库调用并提高响应时间。

引入依赖

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

开启缓存

@SpringBootApplication@EnableCachingpublic class App {}

使用缓存

@Cacheable("products")public List<ProductgetAllProducts() {      return productRepository.findAll();}

关于缓存的详细使用,请查看下面链接:

弃用Spring Cache!首选多级缓存框架JetCache

2.6 优化REST API接口

Spring Boot REST API应该针对速度和低延迟进行优化。

启用GZIP压缩

server:  compression:    enabled: true    mime-types: text/html,text/xml,text/plain,application/json

这将大大减小响应内容的大小。详细请查看下面链接:

API接口优化!基于Spring Boot 实现Deflate压缩技术

2.7 耗时任务使用异步处理

对于繁重的计算或长时间运行的任务,使用异步处理。可以使用@Async注解来异步执行这些任务。

开启异步功能

@EnableAsync@SpringBootApplicationpublic class App{}

任务异步执行

@Asyncpublic CompletableFuture<StringprocessHeavyTask() {      return CompletableFuture.supplyAsync(() -> "Task Completed");}

关于异步任务的更多知识,请查看下面链接:

SpringBoot异步任务@Async你真的会用吗?这6点细节你知道吗?

你用错了!详解SpringBoot异步任务&任务调度&异步请求线程池的使用及原理

Spring6.1 异步和定时任务新特性,太实用了

2.8 使用虚拟线程

Spring Boot 3支持虚拟线程,以提升多线程性能(支持异步任务,任务调度)。

自定义线程池对象

@BeanExecutor taskExecutor() {      return Executors.newVirtualThreadPerTaskExecutor();}

当使用默认线程池执行异步任务或任务调度时则需要开启如下功能配置:

spring:  threads:    virtual:      enabled: true

2.9 异步记录日志

日志记录会降低应用程序的运行速度。使用异步日志记录可提高性能。

如下logback-spring.xml配置:

<configuration>      <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">            <appender-ref ref="FILE"/>      </appender></configuration>

这样可以防止日志记录减慢请求处理速度。

2.10 使用Actuator监控应用程序性能

Spring Boot Actuator 提供内置指标和健康监控。

引入依赖

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

配置相应端点

management:  endpoints:    web:      exposure:        include: health,info,metrics

使用 /actuator/health 查看应用程序的运行状况。

有关Actuator更多内容请查看下面链接:

线上实时监控 Spring Boot 应用的核心性能指标


以上是本篇文章的全部内容,如对你有帮助帮忙点赞+转发+收藏

推荐文章

API接口优化!基于Spring Boot 实现Deflate压缩技术

这款开源组件太惊艳!Spring Boot仅需一行代码,轻松接入DeepSeek

追踪数据变化,轻松应对挑战:Spring Data JPA审计功能解析

Spring Boot + 事务钩子,完美解决事务并发问题

高级开发!Spring Boot 自定义@Transactional,底层原理很简单

高级开发!自定义@Value实时刷新最新配置

弃用RestTemplate!RestClient真香

基于Spring Boot给所有Controller接口添加统一前缀的5种方式

Spring Boot中通过3种方式初始化数据,你们如何选择?

基于Spring Boot六种策略识别上传文件类型

生产环境Spring Boot切记要关闭这个开关

真香!RestTemplate、RestClient再不要直接使用了,新玩法来了

【声明】内容源于网络
0
0
Spring全家桶实战案例
Java全栈开发,前端Vue2/3全家桶;Spring, SpringBoot 2/3, Spring Cloud各种实战案例及源码解读
内容 832
粉丝 0
Spring全家桶实战案例 Java全栈开发,前端Vue2/3全家桶;Spring, SpringBoot 2/3, Spring Cloud各种实战案例及源码解读
总阅读195
粉丝0
内容832