Spring之spring-context-indexer依賴詳解
Spring spring-context-indexer依賴
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-indexer</artifactId>
<version>5.2.0.RELEASE</version>
<optional>true</optional>
</dependency>
</dependencies>
雖然類路徑掃描非??欤荢pring內(nèi)部存在大量的類,添加此依賴,可以通過在編譯時創(chuàng)建候選對象的靜態(tài)列表來提高大型應用程序的啟動性能。
在此模式下,作為組件掃描目標的所有模塊都必須使用此機制。
配置springboot啟動時自動打開瀏覽器 spring-context-indexer原理
int port = 8080;
String portPrefix = "--server.port=";
for (String arg : args) {
if (arg.startsWith(portPrefix)) {
port = Integer.parseInt(arg.substring(portPrefix.length()));
}
}
SpringApplication.run(AppRegisterApplication.class, args);
try {
Runtime.getRuntime().exec("cmd /c start http://localhost:" + port);
} catch (IOException e) {
e.printStackTrace();
}
現(xiàn)在使用的springboot 項目大了, 每次啟動都非常的慢, 所有有了以下的依賴, 加速啟動:
spring-context-indexer
說明
1.雖然類路徑掃描非???,但是Spring內(nèi)部存在大量的類,添加此依賴,可以通過在編譯時創(chuàng)建候選對象的靜態(tài)列表來提高大型應用程序的啟動性能。
2.但是在此模式下,作為組件掃描目標的所有模塊都必須使用此機制。才可以。
3.需要spring5以上才能使用,親測有效, 依賴如下:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-indexer</artifactId>
<version>5.2.0.RELEASE</version>
<optional>true</optional>
</dependency>
然后再你的啟動類上加上一個注解: @Indexed ,用來表示, 你開啟了索引, 會加速項目的啟動速度.
原理說明:
先看官方的解釋:

在項目中使用了@Indexed之后,編譯打包的時候會在項目中自動生成META-INT/spring.components文件。
當Spring應用上下文執(zhí)行ComponentScan掃描時,META-INT/spring.components將會被CandidateComponentsIndexLoader 讀取并加載,轉(zhuǎn)換為CandidateComponentsIndex對象,這樣的話@ComponentScan不在掃描指定的package,而是讀取CandidateComponentsIndex對象,從而達到提升性能的目的.
使用需注意點
雖然這個@Indexed注解能提升性能,但是在使用的時候也需要注意一一下。
假設Spring應用中存在一個包含META-INT/spring.components資源的a.jar,b.jar僅存在模式注解,那么使用@ComponentScan掃描這兩個JAR中的package時,b.jar 中的模式注解不會被識別。
請務必注意這樣的問題。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java多態(tài)和實現(xiàn)接口的類的對象賦值給接口引用的方法(推薦)
下面小編就為大家?guī)硪黄狫ava多態(tài)和實現(xiàn)接口的類的對象賦值給接口引用的方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02
詳解使用Spring的restTemplete進行Http請求
本篇文章主要介紹了詳解使用Spring的restTemplete進行Http請求,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06
基于SpringBoot實現(xiàn)驗證碼功能的代碼及思路
SpringBoot技術是目前市面上從事JavaEE企業(yè)級開發(fā)過程中使用量最大的技術,下面這篇文章主要給大家介紹了如何基于SpringBoot實現(xiàn)驗證碼功能的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-07-07
Spring Cloud中使用Feign,@RequestBody無法繼承的解決方案
這篇文章主要介紹了Spring Cloud中使用Feign,@RequestBody無法繼承的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
Flowable整合SpringBoot實現(xiàn)的示例代碼
本文詳細介紹了如何在SpringBoot項目中整合Flowable進行工作流管理,包括依賴引入、流程部署與啟動、表結(jié)構(gòu)、流程掛起和激活以及任務分配等關鍵操作,具有一定的參考價值,感興趣的可以了解一下2024-09-09
SpringDataElasticsearch與SpEL表達式實現(xiàn)ES動態(tài)索引
這篇文章主要介紹了SpringDataElasticsearch與SpEL表達式實現(xiàn)ES動態(tài)索引,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下2022-09-09
淺談Spring Cloud Netflix-Ribbon灰度方案之Zuul網(wǎng)關灰度
這篇文章主要介紹了淺談Spring Cloud Netflix-Ribbon灰度方案之Zuul網(wǎng)關灰度,想了解Ribbon灰度的同學可以參考下2021-04-04

