最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot啟動太慢的7個優(yōu)化技巧

 更新時間:2025年12月25日 09:39:27   作者:Java編程愛好者  
項目越做越大,SpringBoot啟動時間從幾秒變成了30多秒,改一行代碼等半分鐘,效率太低了,今天分享7個優(yōu)化技巧,親測有效,大家可以根據(jù)需要進行選擇

SpringBoot啟動太慢?幾個優(yōu)化技巧

項目越做越大,SpringBoot啟動時間從幾秒變成了30多秒。

改一行代碼等半分鐘,效率太低了。今天分享幾個優(yōu)化技巧,親測有效。

先找到慢在哪

優(yōu)化之前,先看看時間花在哪了。

SpringBoot 2.4以上可以開啟啟動分析:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(Application.class);
        app.setApplicationStartup(new BufferingApplicationStartup(2048));
        app.run(args);
    }
}

啟動后訪問/actuator/startup就能看到每個步驟的耗時。

常見的耗時大戶:

  • 包掃描范圍太大
  • 自動配置太多
  • 數(shù)據(jù)源初始化
  • MyBatis Mapper掃描

優(yōu)化1:縮小包掃描范圍

// 優(yōu)化前:掃描整個包
@SpringBootApplication
public class Application {}

// 優(yōu)化后:只掃描需要的包
@SpringBootApplication(scanBasePackages = {
    "com.example.controller",
    "com.example.service",
    "com.example.config"
})
public class Application {}

包越少,掃描越快。

優(yōu)化2:排除不需要的自動配置

SpringBoot會自動配置很多東西,但不是都用得上:

@SpringBootApplication(exclude = {
    DataSourceAutoConfiguration.class,  // 不用數(shù)據(jù)庫時
    RedisAutoConfiguration.class,        // 不用Redis時
    MongoAutoConfiguration.class,        // 不用MongoDB時
})
public class Application {}

或者在配置文件里排除:

spring:
  autoconfigure:
    exclude:
      - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

優(yōu)化3:延遲初始化

spring:
  main:
    lazy-initialization: true

Bean在第一次使用時才初始化,不是啟動時全部初始化。

注意:  第一次請求會變慢,生產(chǎn)環(huán)境慎用,開發(fā)環(huán)境很適合。

優(yōu)化4:優(yōu)化MyBatis配置

mybatis:
  configuration:
    lazy-loading-enabled: true
  mapper-locations: classpath:mapper/*.xml  # 精確指定,不要用**

Mapper接口用@Mapper注解代替包掃描:

// 不推薦
@MapperScan("com.example")

// 推薦
@Mapper
public interface UserMapper {}

優(yōu)化5:關閉開發(fā)環(huán)境不需要的功能

spring:
  profiles:
    active: dev

---
spring:
  config:
    activate:
      on-profile: dev
      
# 開發(fā)環(huán)境關閉一些功能
springdoc:
  api-docs:
    enabled: false

management:
  endpoint:
    health:
      show-details: never

優(yōu)化6:JVM參數(shù)

開發(fā)環(huán)境追求啟動快,可以加這些參數(shù):

java -XX:TieredStopAtLevel=1 \
     -noverify \
     -Dspring.jmx.enabled=false \
     -jar app.jar
  • -XX:TieredStopAtLevel=1 只用C1編譯,啟動更快
  • -noverify 跳過字節(jié)碼驗證
  • -Dspring.jmx.enabled=false 關閉JMX

大約能提升20%左右。

優(yōu)化7:使用DevTools熱重載

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
</dependency>

改代碼后不用完全重啟,只重新加載變化的部分,幾秒就能生效。

優(yōu)化效果

優(yōu)化項優(yōu)化前優(yōu)化后
縮小包掃描30s27s
排除自動配置27s20s
延遲初始化20s12s
JVM參數(shù)12s10s
DevTools10s3s

從30秒到3秒,效率提升10倍。

開發(fā)vs生產(chǎn)

開發(fā)環(huán)境:  追求啟動快

spring:
  main:
    lazy-initialization: true

生產(chǎn)環(huán)境:  追求運行時性能

spring:
  main:
    lazy-initialization: false

可以用不同的配置文件區(qū)分。

遠程調試

有時候需要連測試環(huán)境的數(shù)據(jù)庫調試,本地配置改成測試環(huán)境的地址就行:

spring:
  datasource:
    url: jdbc:mysql://測試環(huán)境IP:3306/testdb

把本地電腦和測試環(huán)境連起來,配置文件寫虛擬IP就能直接連,不用部署到服務器上調試,啟動優(yōu)化效果也能立刻驗證。

小結

啟動優(yōu)化的核心思路:少加載、晚加載

  • 縮小包掃描范圍
  • 排除不需要的自動配置
  • 延遲初始化(開發(fā)環(huán)境)
  • 用DevTools熱重載
  • JVM用快速啟動參數(shù)

先從最簡單的開始試,效果立竿見影。

到此這篇關于SpringBoot啟動太慢的7個優(yōu)化技巧的文章就介紹到這了,更多相關SpringBoot啟動優(yōu)化內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 基于Mybatis實現(xiàn)動態(tài)數(shù)據(jù)源切換的示例代碼

    基于Mybatis實現(xiàn)動態(tài)數(shù)據(jù)源切換的示例代碼

    在當今的互聯(lián)網(wǎng)應用中,微服務大行其道,隨著業(yè)務的發(fā)展和擴展,單一的數(shù)據(jù)庫無法滿足日益增長的數(shù)據(jù)需求,本文將基于 JDK17 + Spring Boot 3 和 MyBatis 框架實現(xiàn)動態(tài)切換數(shù)據(jù)源功能,需要的朋友可以參考下
    2024-09-09
  • SpringCloud實現(xiàn)文件上傳功能的方法詳解

    SpringCloud實現(xiàn)文件上傳功能的方法詳解

    這篇文章主要為大家詳細介紹了SpringCloud如何實現(xiàn)文件上傳功能,文中的示例代碼講解詳細,對我們學習有一定的借鑒價值,需要的可以參考一下
    2022-08-08
  • SpringBoot實現(xiàn)excel生成并且通過郵件發(fā)送的步驟詳解

    SpringBoot實現(xiàn)excel生成并且通過郵件發(fā)送的步驟詳解

    實際開發(fā)中,特別是在B端產(chǎn)品的開發(fā)中,我們經(jīng)常會遇到導出excel的功能,更進階一點的需要我們定期生成統(tǒng)計報表,然后通過郵箱發(fā)送給指定的人員,?今天要帶大家來實現(xiàn)的就是excel生成并通過郵件發(fā)送,需要的朋友可以參考下
    2023-10-10
  • javaSE類和對象進階用法舉例詳解

    javaSE類和對象進階用法舉例詳解

    JavaSE的面向對象編程是軟件開發(fā)中的基石,它通過類和對象的概念,實現(xiàn)了代碼的模塊化、可復用性和靈活性,這篇文章主要介紹了javaSE類和對象進階用法的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-08-08
  • 聊聊MultipartFile與File的一些事兒

    聊聊MultipartFile與File的一些事兒

    這篇文章主要介紹了MultipartFile與File的一些事兒,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java枚舉類用法實例

    Java枚舉類用法實例

    這篇文章主要介紹了Java枚舉類用法,實例分析了java中枚舉類的實現(xiàn)與使用技巧,需要的朋友可以參考下
    2015-05-05
  • SpringBoot+slf4j實現(xiàn)全鏈路調用日志跟蹤的方法(一)

    SpringBoot+slf4j實現(xiàn)全鏈路調用日志跟蹤的方法(一)

    本文重點給大家介紹Tracer集成的slf4j MDC功能,方便用戶在只簡單修改日志配置文件的前提下輸出當前 Tracer 上下文 TraceId,文章通過代碼給大家講解了在springboot中使用的技巧,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • 基于JavaSwing設計和實現(xiàn)的酒店管理系統(tǒng)

    基于JavaSwing設計和實現(xiàn)的酒店管理系統(tǒng)

    這篇文章主要介紹了基于JavaSwing+mysql的酒店管理系統(tǒng)設計和實現(xiàn),它可以實現(xiàn)酒店日常的管理功能包括開房、退房、房間信息、顧客信息管理等
    2021-08-08
  • java局域網(wǎng)聊天小程序

    java局域網(wǎng)聊天小程序

    這篇文章主要為大家詳細介紹了java局域網(wǎng)聊天小程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Java反射機制詳解_動力節(jié)點Java學院整理

    Java反射機制詳解_動力節(jié)點Java學院整理

    這篇文章主要為大家詳細介紹了Java反射機制的相關資料,主要包括反射的概念、作用
    2017-06-06

最新評論

遂平县| 南靖县| 苏尼特右旗| 姚安县| 阜康市| 京山县| 蒙山县| 阜康市| 平江县| 紫阳县| 新田县| 历史| 台北市| 龙江县| 浦县| 鲁甸县| 阜康市| 彝良县| 清涧县| 荃湾区| 白河县| 博乐市| 枣阳市| 平湖市| 托里县| 平塘县| 涪陵区| 奈曼旗| 三江| 道孚县| 闽侯县| 龙海市| 湘潭县| 武乡县| 卓尼县| 琼海市| 法库县| 岳阳县| 壶关县| 淮安市| 胶南市|