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

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

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

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

1. 介绍

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

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

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

2. 配置使用

引入依赖包

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

如果使用的是gradleBgO28资讯网——每日最新资讯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) ;    }  }}

控制台输出BgO28资讯网——每日最新资讯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都能被容器扫描到BgO28资讯网——每日最新资讯28at.com

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

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

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

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

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

# ...person

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

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

自定义注解支持

我们可以在索引文件中使用自己定义的注解,示例如下BgO28资讯网——每日最新资讯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

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

# ...personuser

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

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

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

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

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

自动生成的spring.components文件,默认将在target/classes/META-INF目录下,部分内容:BgO28资讯网——每日最新资讯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

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

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

-Dspring.index.ignore=true

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

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

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

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

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

标签:
  • 热门焦点
  • 5月安卓手机好评榜:魅族20 Pro夺冠

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年5月1日至5月31日,仅限国内市场。第一名:魅族20 Pro好评率:97.50%不得不感慨魅族老品牌还
  • 一加首款折叠屏!一加Open渲染图出炉:罕见单手可握小尺寸

    8月5日消息,此前就有爆料称,一加首款折叠屏手机将会在第三季度上市,如今随着时间临近,新机的各种消息也开始浮出水面。据悉,这款新机将会被命名为&ldquo;On
  • 一文搞定Java NIO,以及各种奇葩流

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

    来源丨海克财经与共享充电宝相差不多,共享单车已很久没有被国内热点新闻关照到了。除了一再涨价和用户直呼用不起了。近日多家媒体再发报道称,成都、天津、郑州等地多个共享单
  • 10天营收超1亿美元,《星铁》比《原神》差在哪?

    来源:伯虎财经作者:陈平安即便你没玩过《原神》,你一定听说过的它的大名。恨它的人把《原神》开服那天称作是中国游戏史上最黑暗的一天,有粉丝因为索尼在PS平台上线《原神》,怒而
  • 新电商三兄弟,“抖快红”成团!

    来源:价值研究所作 者:Hernanderz 随着内容电商的概念兴起,抖音、快手、小红书组成的&ldquo;新电商三兄弟&rdquo;成为业内一股不可忽视的势力,给阿里、京东、拼多多带去了巨大压
  • 2299元起!iQOO Pad开启预售:性能最强天玑平板

    5月23日,iQOO如期举行了新品发布会,除了首发安卓最强旗舰处理器的iQOO Neo8系列新机外,还在发布会上推出了旗下首款平板电脑——iQOO Pad,其搭载了天玑
  • DRAM存储器10月价格下跌,NAND闪存本月价格与上月持平

    10月30日,据韩国媒体消息,自今年年初以来一直在上涨的 DRAM 存储器的交易价格仅在本月就下跌了近 10%,此次是全年首次降价,而NAND 闪存本月价格与上月持平。市
  • 华为举行春季智慧办公新品发布会 首次推出电子墨水屏平板

    北京时间2月27日晚,华为在巴塞罗那举行春季智慧办公新品发布会,在海外市场推出之前已经在中国市场上市的笔记本、平板、激光打印机等办公产品,并首次推出搭载
Top