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

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

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

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

1. 介绍

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

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

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

2. 配置使用

引入依赖包

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

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

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

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

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

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

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

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

# ...person

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

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

自定义注解支持

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

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

# ...personuser

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

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

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

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

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

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

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

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

-Dspring.index.ignore=true

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

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

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

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

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

标签:
  • 热门焦点
  • 小米平板5 Pro 12.4简评:多专多能 兼顾影音娱乐的大屏利器

    疫情带来了网课,网课盘活了安卓平板,安卓平板市场虽然中途停滞了几年,但好的一点就是停滞的这几年行业又有了新的发展方向,例如超窄边框、高刷新率、多摄镜头组合等,这就让安卓
  • 6月安卓手机好评榜:魅族20 Pro蝉联冠军

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年6月1日至6月30日,仅限国内市场。第一名:魅族20 Pro好评率:95%5月份的时候魅族20 Pro就是
  • 5月iOS设备好评榜:iPhone 14仅排第43?

    来到新的一月,安兔兔的各个榜单又重新汇总了数据,像安卓阵营的榜单都有着比较大的变动,不过iOS由于设备的更新换代并没有那么快,所以相对来说变化并不大,特别是iOS好评榜,老款设
  • 一篇文章带你了解 CSS 属性选择器

    属性选择器对带有指定属性的 HTML 元素设置样式。可以为拥有指定属性的 HTML 元素设置样式,而不仅限于 class 和 id 属性。一、了解属性选择器CSS属性选择器提供了一种简单而
  • 三分钟白话RocketMQ系列—— 如何发送消息

    我们知道RocketMQ主要分为消息 生产、存储(消息堆积)、消费 三大块领域。那接下来,我们白话一下,RocketMQ是如何发送消息的,揭秘消息生产全过程。注意,如果白话中不小心提到相关代
  • WebRTC.Net库开发进阶,教你实现屏幕共享和多路复用!

    WebRTC.Net库:让你的应用更亲民友好,实现视频通话无痛接入! 除了基本用法外,还有一些进阶用法可以更好地利用该库。自定义 STUN/TURN 服务器配置WebRTC.Net 默认使用 Google 的
  • 腾讯VS网易,最卷游戏暑期档,谁能笑到最后?

    作者:无锈钵来源:财经无忌7月16日晚,上海1862时尚艺术中心。伴随着幻象的精准命中,硕大的荧幕之上,比分被定格在了14:12,被寄予厚望的EDG战队以绝对的优势战胜了BLG战队,拿下了总决
  • iQOO 11S评测:行业唯一的200W标准版旗舰

    【Techweb评测】去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,该机不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞
  • 三翼鸟智能家居亮相电博会,让用户体验更真实

    2021电博会在青岛国际会展中心开幕中,三翼鸟直接把“家”搬到了现场,成为了展会的一大看点。这也是三翼鸟继9月9日发布了行业首个一站式定制智慧家平台后的
Top