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

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

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

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

項(xiàng)目越做越大,SpringBoot啟動時(shí)間從幾秒變成了30多秒。

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

先找到慢在哪

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

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就能看到每個(gè)步驟的耗時(shí)。

常見的耗時(shí)大戶:

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

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

// 優(yōu)化前:掃描整個(gè)包
@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ù)庫時(shí)
    RedisAutoConfiguration.class,        // 不用Redis時(shí)
    MongoAutoConfiguration.class,        // 不用MongoDB時(shí)
})
public class Application {}

或者在配置文件里排除:

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

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

spring:
  main:
    lazy-initialization: true

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

注意:  第一次請求會變慢,生產(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:關(guān)閉開發(fā)環(huán)境不需要的功能

spring:
  profiles:
    active: dev

---
spring:
  config:
    activate:
      on-profile: dev
      
# 開發(fā)環(huán)境關(guā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é)碼驗(yàn)證
  • -Dspring.jmx.enabled=false 關(guān)閉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)化項(xiàng)優(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)境:  追求運(yùn)行時(shí)性能

spring:
  main:
    lazy-initialization: false

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

遠(yuǎn)程調(diào)試

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

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

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

小結(jié)

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

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

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

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

相關(guān)文章

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

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

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

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

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

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

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

    javaSE類和對象進(jìn)階用法舉例詳解

    JavaSE的面向?qū)ο缶幊淌擒浖_發(fā)中的基石,它通過類和對象的概念,實(shí)現(xiàn)了代碼的模塊化、可復(fù)用性和靈活性,這篇文章主要介紹了javaSE類和對象進(jìn)階用法的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-08-08
  • 聊聊MultipartFile與File的一些事兒

    聊聊MultipartFile與File的一些事兒

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

    Java枚舉類用法實(shí)例

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

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

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

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

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

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

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

    Java反射機(jī)制詳解_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了Java反射機(jī)制的相關(guān)資料,主要包括反射的概念、作用
    2017-06-06

最新評論

昭苏县| 城固县| 景东| 新疆| 固安县| 阿瓦提县| 南投市| 玛多县| 三门峡市| 利川市| 竹北市| 芮城县| 青神县| 萨嘎县| 江达县| 定襄县| 泸溪县| 梁平县| 湘阴县| 婺源县| 西贡区| 宜兰县| 南岸区| 新干县| 阿拉善右旗| 监利县| 阳城县| 长兴县| 阜新市| 佳木斯市| 河源市| 武陟县| 朝阳市| 桂林市| 佳木斯市| 全椒县| 余姚市| 阳朔县| 宜州市| 长宁县| 南投市|