成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

性能暴漲 10 倍!Spring Boot 調優的 12 個關鍵節點全解析

開發 前端
本文將從?12 個關鍵技術點?出發,全面梳理 Spring Boot 項目中的性能優化策略,希望你能從中有所收獲。

在日常開發 Spring Boot 應用時,你是否曾遇到過如下代碼片段?

@GetMapping("/orders")
public List<Order> listOrders() {
    return orderDao.findAll();  // 一次性查詢全表數據
}

乍一看似乎沒有問題,但如果訂單表已有 50 萬條數據,這段代碼將導致嚴重的性能瓶頸:查詢延遲顯著上升,甚至出現內存溢出(OOM)風險。

問題復盤:

  • 查詢未分頁
  • 缺少緩存
  • 沒有使用批處理機制

這次“線上事故”讓我深刻體會到:性能優化不是亡羊補牢,而應貫穿于開發生命周期的每一個階段。

本文將從 12 個關鍵技術點 出發,全面梳理 Spring Boot 項目中的性能優化策略,希望你能從中有所收獲。

數據庫連接池調優:精準匹配系統資源

癥狀:

默認配置下,連接池資源使用不當,高并發時連接耗盡或排隊。

常見誤區:

spring:
  datasource:
    hikari:
      maximum-pool-size: 1000  # 設置過大
      connection-timeout: 30000  # 設置過長

推薦配置:

spring:
  datasource:
    hikari:
      maximum-pool-size: ${CPU核心數 * 2}
      minimum-idle: 5
      connection-timeout: 3000
      max-lifetime: 1800000
      idle-timeout: 600000

根據硬件環境(如 CPU 核心數)合理配置連接池,避免資源浪費。

JVM 參數優化:降低 GC 停頓帶來的抖動

建議啟動參數:

java-Xms4g-Xmx4g\
-XX:NewRatio=1\
-XX:+UseG1GC\
-XX:MaxGCPauseMillis=200\
-XX:InitiatingHeapOccupancyPercent=35\
-XX:+AlwaysPreTouch

將新生代與老年代等比設置,使用 G1 收集器,最大暫停時間控制在 200ms 內。

精簡自動裝配:去除不必要的組件

示例:

@SpringBootApplication(exclude = {
    DataSourceAutoConfiguration.class,
    SecurityAutoConfiguration.class
})

屏蔽當前未使用的自動裝配組件,有助于提升應用啟動速度與資源占用效率。

啟用響應壓縮:減少傳輸體積,提升響應速度

server:
  compression:
    enabled: true
    mime-types: text/html,text/xml,text/plain,text/css,text/javascript,application/json
    min-response-size: 1024

啟用 Gzip 壓縮功能,尤其對接口返回大量 JSON 數據的場景效果明顯。

接口參數校驗:防止資源被惡意占用

@GetMapping("/products")
public PageResult<Product> list(
    @RequestParam @Max(100) int pageSize,
    @RequestParam @Min(1) int pageNum) {
    // ...
}

通過注解式參數驗證,及時阻斷不合理請求,保護服務端資源。

異步執行任務:提升吞吐,釋放主線程

@Async("taskExecutor")
public CompletableFuture<List<Order>> process() {
    return CompletableFuture.completedFuture(doHeavyWork());
}


@Bean("taskExecutor")
public Executor taskExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(5);
    executor.setMaxPoolSize(10);
    executor.setQueueCapacity(500);
    return executor;
}

適用于非實時或耗時較長的處理流程。

緩存機制接入:減少重復查詢壓力

@Cacheable(cacheNames = "products", key = "#id", cacheManager = "caffeineCacheManager")
public Product getProductDetail(Long id) {
    return productDao.getById(id);
}

使用 Caffeine 或 Redis 緩存,可有效減輕數據庫負擔,提升接口響應速度。

批量操作替代單條處理:成倍提升寫入效率

@Transactional
public void batchInsert(List<Product> products) {
    jdbcTemplate.batchUpdate(
        "INSERT INTO product(name,price) VALUES(?,?)",
        products,
        500,
        (ps, product) -> {
            ps.setString(1, product.getName());
            ps.setBigDecimal(2, product.getPrice());
        });
}

將頻繁的單條操作合并為批處理,減少數據庫連接與事務開銷。

深度優化 SQL 與索引:保障查詢效率

場景問題:

SELECT * FROM products WHERE category = '手機' AND price > 5000 ORDER BY create_time DESC;

優化建議:

① 聯合索引:

ALTERTABLE products ADDINDEX idx_category_price_create (category, price, create_time);

② 覆蓋索引:

僅查詢索引字段:

SELECT id, category, price, create_time FROM products WHERE category ='手機'AND price >5000ORDERBY create_time DESC;

③ 避免函數索引失效:

錯誤:

WHEREDATE(create_time)='2023-01-01'

正確:

WHERE create_time BETWEEN'2023-01-01 00:00:00'AND'2023-01-01 23:59:59'

④ 監控與分析:

SELECT*FROM sys.schema_index_statistics WHERE table_name ='products';

使用 EXPLAIN FORMAT=JSON 分析執行計劃。

自定義線程池:應對高并發的可控策略

@Bean("customPool")
public Executor customThreadPool() {
    return new ThreadPoolExecutor(
        10,
        50,
        60, TimeUnit.SECONDS,
        new LinkedBlockingQueue<>(1000),
        new CustomThreadFactory(),
        new ThreadPoolExecutor.CallerRunsPolicy());
}

杜絕默認線程池帶來的資源不可控問題,自定義線程池策略更符合業務場景。

接口限流與熔斷:抵御突發流量沖擊

@SentinelResource(
    value = "orderQuery",
    blockHandler = "handleBlock",
    fallback = "handleFallback")
@GetMapping("/orders/{id}")
public Order getOrder(@PathVariable Long id) {
    return orderService.getById(id);
}


public Order handleBlock(Long id, BlockException ex) {
    throw new RuntimeException("當前訪問過多,請稍后再試");
}


public Order handleFallback(Long id, Throwable t) {
    return Order.getDefaultOrder();
}

使用 Sentinel 實現服務保護機制,避免單點失控造成連鎖故障。

全鏈路監控體系:問題診斷有據可依

management:
  endpoints:
    web:
      exposure:
        include: "*"
  metrics:
    export:
      prometheus:
        enabled: true

結合 Prometheus + Grafana 打造指標可視化平臺,全面掌握系統運行狀態。

總結:Spring Boot 性能優化全景圖

方向

優化措施

數據源

合理配置連接池

JVM 調整

減少 Full GC 停頓

組件管理

剔除不必要的自動裝配

接口性能

響應壓縮 + 參數校驗

并發能力

異步執行 + 自定義線程池

緩存機制

使用本地或分布式緩存

數據處理

使用批量操作提升效率

數據庫優化

聯合索引、覆蓋索引、查詢改寫等

限流熔斷

Sentinel 限流熔斷降級處理

全鏈路監控

Prometheus 等構建監控體系

優化三大原則:

  1. 預防為主寫代碼時就要考慮性能;
  2. 指標驅動以數據為依據來做優化;
  3. 持續迭代性能調優是長期過程。

推薦工具集:

  • Arthas:線上問題診斷
  • JProfiler:性能分析
  • Prometheus + Grafana:指標監控系統
責任編輯:武曉燕 來源: 路條編程
相關推薦

2023-02-07 08:00:00

MySQL數據庫技巧

2025-06-05 03:00:00

Spring異步接口

2010-08-20 11:22:48

DB2性能調優

2010-07-28 09:42:57

DB2性能

2010-08-13 14:40:14

DB2性能調優

2011-03-10 14:40:54

LAMPMysql

2020-02-26 15:35:17

Spring Boot項目優化JVM調優

2017-07-21 08:55:13

TomcatJVM容器

2020-01-14 09:13:48

Tomcat調優配置

2012-06-20 11:05:47

性能調優攻略

2024-12-26 11:01:22

2017-11-17 08:56:59

Java性能優化技巧

2021-03-04 08:39:21

SparkRDD調優

2010-08-20 14:15:08

DB2性能調優

2023-08-16 11:39:19

高并發調優

2013-09-24 13:06:56

AngularJS性能優化

2011-05-20 15:02:01

Oracle性能調優

2011-11-14 10:28:23

2020-11-30 11:40:35

NginxLinux性能調優

2010-08-02 17:42:40

DB2性能調優
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久小视频 | www.色综合 | 精品中文字幕在线 | 久久一二区 | 欧美黑人国产人伦爽爽爽 | 日韩午夜在线播放 | 91久久精品视频 | 狠狠色狠狠色综合系列 | 国产精品视频97 | 日韩精品一区二区三区四区 | 成人精品一区二区三区中文字幕 | 欧洲毛片| 黄色永久免费 | 国产999精品久久久 日本视频一区二区三区 | 999精品网| 91在线精品播放 | 国产视频h | 黑人巨大精品欧美一区二区免费 | 7777在线视频免费播放 | 亚洲一区二区在线播放 | 97成人在线 | 欧美一区二区三区在线播放 | 日韩精品在线观看一区二区三区 | 亚洲高清在线 | 色婷婷一区二区三区四区 | 久久久久99 | 欧美日本一区 | 亚洲午夜电影 | 在线视频91| 日韩在线视频观看 | 欧美日韩成人在线 | 成人日韩精品 | 91社影院在线观看 | 成人a免费 | 91 视频网站 | 亚洲电影一区二区三区 | 久久神马 | 久久不卡日韩美女 | 国产三级精品三级在线观看四季网 | 午夜影视 | 国产一级免费视频 |