Spring之spring-context-indexer依賴(lài)詳解
Spring spring-context-indexer依賴(lài)
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-indexer</artifactId>
<version>5.2.0.RELEASE</version>
<optional>true</optional>
</dependency>
</dependencies>
雖然類(lèi)路徑掃描非???,但是Spring內(nèi)部存在大量的類(lèi),添加此依賴(lài),可以通過(guò)在編譯時(shí)創(chuàng)建候選對(duì)象的靜態(tài)列表來(lái)提高大型應(yīng)用程序的啟動(dòng)性能。
在此模式下,作為組件掃描目標(biāo)的所有模塊都必須使用此機(jī)制。
配置springboot啟動(dòng)時(shí)自動(dòng)打開(kāi)瀏覽器 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 項(xiàng)目大了, 每次啟動(dòng)都非常的慢, 所有有了以下的依賴(lài), 加速啟動(dòng):
spring-context-indexer
說(shuō)明
1.雖然類(lèi)路徑掃描非常快,但是Spring內(nèi)部存在大量的類(lèi),添加此依賴(lài),可以通過(guò)在編譯時(shí)創(chuàng)建候選對(duì)象的靜態(tài)列表來(lái)提高大型應(yīng)用程序的啟動(dòng)性能。
2.但是在此模式下,作為組件掃描目標(biāo)的所有模塊都必須使用此機(jī)制。才可以。
3.需要spring5以上才能使用,親測(cè)有效, 依賴(lài)如下:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-indexer</artifactId>
<version>5.2.0.RELEASE</version>
<optional>true</optional>
</dependency>
然后再你的啟動(dòng)類(lèi)上加上一個(gè)注解: @Indexed ,用來(lái)表示, 你開(kāi)啟了索引, 會(huì)加速項(xiàng)目的啟動(dòng)速度.
原理說(shuō)明:
先看官方的解釋?zhuān)?/p>

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

