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>
雖然類路徑掃描非???,但是Spring內(nèi)部存在大量的類,添加此依賴,可以通過在編譯時(shí)創(chuàng)建候選對(duì)象的靜態(tài)列表來提高大型應(yīng)用程序的啟動(dòng)性能。
在此模式下,作為組件掃描目標(biāo)的所有模塊都必須使用此機(jī)制。
配置springboot啟動(dòng)時(shí)自動(dòng)打開瀏覽器 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)都非常的慢, 所有有了以下的依賴, 加速啟動(dòng):
spring-context-indexer
說明
1.雖然類路徑掃描非???,但是Spring內(nèi)部存在大量的類,添加此依賴,可以通過在編譯時(shí)創(chuàng)建候選對(duì)象的靜態(tài)列表來提高大型應(yīng)用程序的啟動(dòng)性能。
2.但是在此模式下,作為組件掃描目標(biāo)的所有模塊都必須使用此機(jī)制。才可以。
3.需要spring5以上才能使用,親測(cè)有效, 依賴如下:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-indexer</artifactId> <version>5.2.0.RELEASE</version> <optional>true</optional> </dependency>
然后再你的啟動(dòng)類上加上一個(gè)注解: @Indexed ,用來表示, 你開啟了索引, 會(huì)加速項(xiàng)目的啟動(dòng)速度.
原理說明:
先看官方的解釋:
在項(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ì)象,這樣的話@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ù)必注意這樣的問題。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java 中InputStream,String,File之間的相互轉(zhuǎn)化對(duì)比
這篇文章主要介紹了java 中InputStream,String,File之間的相互轉(zhuǎn)化對(duì)比的相關(guān)資料,需要的朋友可以參考下2017-04-04使用IDEA搭建一個(gè)簡(jiǎn)單的SpringBoot項(xiàng)目超詳細(xì)過程
這篇文章主要介紹了使用IDEA搭建一個(gè)簡(jiǎn)單的SpringBoot項(xiàng)目超詳細(xì)過程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02javascript與jsp發(fā)送請(qǐng)求到servlet的幾種方式實(shí)例
本文分別給出了javascript發(fā)送請(qǐng)求到servlet的5種方式實(shí)例與 jsp發(fā)送請(qǐng)求到servlet的6種方式實(shí)例2018-03-03詳解Java實(shí)現(xiàn)的k-means聚類算法
這篇文章主要介紹了詳解Java實(shí)現(xiàn)的k-means聚類算法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-01-01JUC系列學(xué)習(xí)工具類CountDownLatch詳解
這篇文章主要介紹了JUC系列學(xué)習(xí)工具類CountDownLatch詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可任意參考一下2022-08-08