当前位置:首页 > 科技  > 软件

优化技巧:如何加快Spring项目启动速度

来源: 责编: 时间:2023-12-06 09:19:13 404观看
导读环境:Spring5.3.231. 介绍在大型的Spring项目中,由于有成百上千的Bean需要通过扫描注册到Spring容器中,这会导致启动速度变慢。为了解决这个问题,我们可以使用spring-context-indexer来优化启动速度。spring-context-inde

环境:Spring5.3.23ruX28资讯网——每日最新资讯28at.com

1. 介绍

在大型的Spring项目中,由于有成百上千的Bean需要通过扫描注册到Spring容器中,这会导致启动速度变慢。为了解决这个问题,我们可以使用spring-context-indexer来优化启动速度。ruX28资讯网——每日最新资讯28at.com

spring-context-indexer是一个工具,它可以在编译时为类路径下的组件创建索引,这样在启动时就可以通过索引快速地加载和初始化组件。使用spring-context-indexer可以大大提升Spring应用程序的启动速度,从而使得开发人员可以更快地开发和测试应用程序,提高开发效率。ruX28资讯网——每日最新资讯28at.com

在大型项目中,由于Bean数量众多,Spring应用程序的启动时间可能会变得非常长。通过使用spring-context-indexer,我们可以减少启动时间,从而减少对系统资源的占用,使得更多的资源可以被用来处理其他任务。此外,快速启动应用程序还可以减少因为程序长时间未响应而导致的故障和错误率。ruX28资讯网——每日最新资讯28at.com

2. 配置使用

引入依赖包

<dependency>  <groupId>org.springframework</groupId>  <artifactId>spring-context-indexer</artifactId>  <version>5.3.23</version>  <optional>true</optional></dependency>

如果使用的是gradleruX28资讯网——每日最新资讯28at.com

# gradle 4.5以下版本包括4.5dependencies {  compileOnly "org.springframework:spring-context-indexer:5.3.23"}# gradle 4.6以上版本dependencies {  annotationProcessor "org.springframework:spring-context-indexer:5.3.23"}

准备Bean对象

@Componentpublic class Person {}@Componentpublic class Student {}@Componentpublic class User {}

测试上面的的类都能被容器扫描到

try (AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext("com.pack.context_indexed")) {    for (String name : context.getBeanDefinitionNames()) {      System.out.println(name) ;    }  }}

控制台输出ruX28资讯网——每日最新资讯28at.com

org.springframework.context.annotation.internalConfigurationAnnotationProcessororg.springframework.context.annotation.internalAutowiredAnnotationProcessororg.springframework.context.annotation.internalCommonAnnotationProcessororg.springframework.context.annotation.internalPersistenceAnnotationProcessororg.springframework.context.event.internalEventListenerProcessororg.springframework.context.event.internalEventListenerFactorypersonstudentuser

所有的bean都能被容器扫描到ruX28资讯网——每日最新资讯28at.com

手动创建META-INF/spring.components 文件

内容如下ruX28资讯网——每日最新资讯28at.com

com.pack.context_indexed.Person=org.springframework.stereotype.Component

格式:完整的包名=完整注解名ruX28资讯网——每日最新资讯28at.com

有了上面的索引文件后,再次运行上面的测试文件ruX28资讯网——每日最新资讯28at.com

# ...person

自定义的bean就只剩下person了,这就是因为在上面的索引文件中只定义了    person的原因,这样就不会在扫描你当前包下的所有class文件了,只会读取索引文件中的内容。ruX28资讯网——每日最新资讯28at.com

此时如果你访问不在此列表中的类,程序将报错,找不到对应的Bean对象。ruX28资讯网——每日最新资讯28at.com

自定义注解支持

我们可以在索引文件中使用自己定义的注解,示例如下ruX28资讯网——每日最新资讯28at.com

// 自定义注解@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Componentpublic @interface PackComponent {}// 修改User类注解@PackComponentpublic class User {}

在索引文件中添加配置

com.pack.context_indexed.Person=org.springframework.stereotype.Componentcom.pack.context_indexed.User=com.pack.context_indexed.PackComponent

控制台输出ruX28资讯网——每日最新资讯28at.com

# ...personuser

以上都是通过手动创建的方式,在实际大型项目中如果你手动创建维护索引文件那还不如不使用索引,并且还及其容易出现错误。我们可以借助IDE工具配置注解处理器来帮我们自动的完成索引文件的创建。ruX28资讯网——每日最新资讯28at.com

这里以Eclipse为例来配置ruX28资讯网——每日最新资讯28at.com

首先,将spring-context-indexer添加eclipse注解处理中ruX28资讯网——每日最新资讯28at.com

图片图片ruX28资讯网——每日最新资讯28at.com

通过上面的1,2,3步后,索引文件将会被自动的生成。ruX28资讯网——每日最新资讯28at.com

自动生成的spring.components文件,默认将在target/classes/META-INF目录下,部分内容:ruX28资讯网——每日最新资讯28at.com

com.pack.context_indexed.Persnotallow=org.springframework.stereotype.Componentcom.pack.context_indexed.Student=org.springframework.stereotype.Componentcom.pack.context_indexed.User=org.springframework.stereotype.Component

关闭索引功能ruX28资讯网——每日最新资讯28at.com

我们可以通过设置JVM参数进行关闭索引功能,在启动程序添加如下参数即可关闭ruX28资讯网——每日最新资讯28at.com

-Dspring.index.ignore=true

在大型Spring项目中,由于Bean数量众多,导致启动速度变慢。使用spring-context-indexer可以优化启动速度,提高开发效率、减少资源占用和减少故障、错误率。spring-context-indexer是一个工具,它可以在编译时为类路径下的组件创建索引,这样在启动时就可以通过索引快速地加载和初始化组件。ruX28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-38514-0.html优化技巧:如何加快Spring项目启动速度

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 理解 Wasm 基础概念,了解 Wasm 是如何被加载运行的?

下一篇: 手把手教你写设计方案,你学明白了吗?

标签:
  • 热门焦点
  • K60 Pro官方停产 第三方瞬间涨价

    虽然没有官方宣布,但Redmi的一些高管也已经透露了,Redmi K60 Pro已经停产且不会补货,这一切都是为了即将到来的K60 Ultra铺路,属于厂家的正常操作。但有意思的是该机在停产之后
  • 6月iOS设备性能榜:M2稳居榜首 A系列只能等一手3nm来救

    没有新品发布,自然iOS设备性能榜的上榜设备就没有什么更替,仅仅只有跑分变化而产生的排名变动,毕竟苹果新品的发布节奏就是这样的,一年下来也就几个移动端新品,不会像安卓厂商,一
  • Raft算法:保障分布式系统共识的稳健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可复制、可冗余、可容错”)的首字母缩写。Raft算法是一种用于在分布式系统
  • 掘力计划第 20 期:Flutter 混合开发的混乱之治

    在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。Flutter 基于自研的 Skia 引擎
  • 在线图片编辑器,支持PSD解析、AI抠图等

    自从我上次分享一个人开发仿造稿定设计的图片编辑器到现在,不知不觉已过去一年时间了,期间我经历了裁员失业、面试找工作碰壁,寒冬下一直没有很好地履行计划.....这些就放在日
  • 一文搞定Java NIO,以及各种奇葩流

    大家好,我是哪吒。很多朋友问我,如何才能学好IO流,对各种流的概念,云里雾里的,不求甚解。用到的时候,现百度,功能虽然实现了,但是为什么用这个?不知道。更别说效率问题了~下次再遇到,
  • 自律,给不了Keep自由!

    来源 | 互联网品牌官作者 | 李大为编排 | 又耳 审核 | 谷晓辉自律能不能给用户自由暂时不好说,但大概率不能给Keep自由。近日,全球最大的在线健身平台Keep正式登陆港交所,努力
  • 小米汽车电池信息疑似曝光:容量101kWh,支持800V高压快充

    7月14日消息,今日一名博主在社交媒体发布了一张疑似小米汽车电池信息的照片,显示该电池包正是宁德时代麒麟电池,容量为101kWh,电压为726.7V,可以预测小
  • onebot M24巧系列一体机采用轻薄机身设计,现已在各平台开售

    onebot M24 巧系列一体机目前已在线上线下各平台同步开售。onebot M24 巧系列采用一体化轻薄机身设计,最薄处为 10.15mm,拥有宝石红、午夜蓝、石墨绿、雅致
Top