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

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

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

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

1. 介绍

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

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

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

2. 配置使用

引入依赖包

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

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

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

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

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

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

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

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

# ...person

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

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

自定义注解支持

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

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

# ...personuser

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

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

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

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

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

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

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

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

-Dspring.index.ignore=true

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

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

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

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

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

标签:
  • 热门焦点
  • 企业采用CRM系统的11个好处

    客户关系管理(CRM)软件可以为企业提供很多的好处,从客户保留到提高生产力。  CRM软件用于企业收集客户互动,以改善客户体验和满意度。  CRM软件市场规模如今超过580
  • 得物效率前端微应用推进过程与思考

    一、背景效率工程随着业务的发展,组织规模的扩大,越来越多的企业开始意识到协作效率对于企业团队的重要性,甚至是决定其在某个行业竞争中突围的关键,是企业长久生存的根本。得物
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • 三星电子Q2营收60万亿韩元 存储业务营收同比仍下滑超过50%

    7月27日消息,据外媒报道,从三星电子所发布的财报来看,他们主要利润来源的存储芯片业务在今年二季度仍不乐观,营收同比仍在大幅下滑,所在的设备解决方案
  • 苹果公司要求三星和LG Display生产「无边框」OLED iPhone显示屏

    据 The Elec 报道,苹果已要求其供应商为未来的 iPhone 型号开发「无边框」OLED 显示面板。苹果显然已要求三星和 LG Display 开发新的 OLED 显示面
  • iQOO 11S评测:行业唯一的200W标准版旗舰

    【Techweb评测】去年底,iQOO推出了“电竞旗舰”iQOO 11系列,作为一款性能强机,该机不仅全球首发2K 144Hz E6全感屏,搭载了第二代骁龙8平台及144Hz电竞
  • 超级标准版旗舰!iQOO 11S全球首发iQOO超算独显芯片

    上半年已接近尾声,截至目前各大品牌旗下的顶级旗舰都已悉数亮相,而下半年即将推出的顶级旗舰已经成为了数码圈爆料的主流,其中就包括全新的iQOO 11S系
  • 由于成本持续增加,笔记本产品价格预计将明显上涨

    根据知情人士透露,由于材料、物流等成本持续增加,笔记本产品价格预计将在2021年下半年有明显上涨。进入6月下旬以来,全球半导体芯片缺货情况加剧,显卡、处理器
  • 北京:科技教育体验基地开始登记

      北京“科技馆之城”科技教育体验基地登记和认证工作日前启动。首批北京科技教育体验基地拟于2023年全国科普日期间挂牌,后续还将开展常态化登记。  北京科技教育体验基
Top