专栏首页Java技术栈Spring Boot 2.2 增加了一个新功能,启动飞起~

Spring Boot 2.2 增加了一个新功能,启动飞起~

前几天栈长分享了一个好玩的框架:一个比Spring Boot快44倍的Java框架!,是不是感觉 Spring Boot 略慢?今天讲一下 Spring Boot 添加的这个新特性,可以大大提升 Spring Boot 的启动速度。

最近,Spring团队宣布在 Spring Boot 2.2+ 中添加了一个重要功能:延迟加载,目前这个版本暂时还是快照版,不过我们可以先了解下怎么使用这个延迟加载功能。

延迟加载是什么意思?

有点经验的程序员应该都知道,在 Spring 框架中早已经支持延迟加载功能的,简单来说就是一个类的实例化,不需要 Spring 容器启动的时候就开始实例化,而是在第一次需要它的时候再实例化,这样大大提升了程序启动速度,也在一定程序上节省了系统资源。

怎么开启延迟加载?

在传统 Spring 项目中我们是这么做的:

<bean id="testBean" calss="cn.javastack.TestBean" lazy-init="true" />

以上 bean 配置是不是很熟悉?

没错,加了 lazy-init="true" 表示延迟加载,默认不加为false,表示容器启动时立即加载。

在 Spring 3.0+ 之后也可以这么做:

@Lazy
public TestBean testBean() {
    return new TestBean();
}

@Lazy:默认值为true,表示延迟加载;

Spring Boot如何开启?

由上面的例子我们可以知道,在任何 Spring Boot 版本中其实是支持 Bean 的延迟加载的,但这样是需要我们手工去配置的,这样会比较麻烦。

在 Spring Boot 2.2+ 中,延期加载将变得更加简单,有几下几种配置方式:

  • 参数:spring.main.lazy-initialization
  • 类:SpringApplication
  • 类:SpringApplicationBuilder

通过以上几种方式设置成:true,容器中的 Bean 就将配置成延迟加载。

Spring Boot 项目在 IDE 中再配合 DevTools 工具,可以使本发开发环境启动变得更快,400ms就可以启动起来了,大大提高了开发效率。

延迟加载有没有缺点?

延迟加载确实可以大大减少应用程序的启动时间,还能节省系统资源,那么问题来了,你可能会问,为什么不默认开启它呢?为什么还要额外提供一个配置?

听栈长道来,延迟加载确实有很多好处,但也会造成一些在启动的时候就能发现而要等到延迟加载才发现的问题,如:内存不足啊、类找不到啊、又或者是配置错误引发的系列问题。

还有一个问题就是,因为第一次请求的时候才去实例化,可能造成第一个请求变慢,响应延迟,体验不是很好。这样一来,对负载均衡和自动伸缩方面也会有不利影响。

结束语

正如我们在上面所分析到的,延迟加载确实可以显着改善启动时间,但也有一些明显的缺点,所以我们一定小心谨慎的启用它。或者我们可以对项目进行评估下,延迟加载真的对我们的项目有这么重要或者急迫么?

等正式版 Spring Boot 2.2 发布,栈长给再出一个实战文章,欢迎关注栈长的微信公众号:Java技术栈,不要走开。

好了,今天的分享就到这里,关注Java技术栈微信公众号,在后台回复:boot,获取栈长整理的更多的 Spring Boot 教程,都是实战干货,以下仅为部分预览。

  • Spring Boot 读取配置的几种方式
  • Spring Boot 如何做参数校验?
  • Spring Boot 最核心的 25 个注解!
  • Spring Boot 2.x 启动全过程源码分析
  • Spring Boot 2.x 新特性总结及迁移指南
  • ……

最后,你们是怎么应用延迟加载功能的,欢迎留言分享~

本文分享自微信公众号 - Java技术栈(javastack),作者:栈长

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring Boot 2.X 来临,本文将带你起飞!

    当前互联网技术盛行,以Spring 框架为主导的Java 互联网技术成了主流,而基于Spring 技术衍生出来的Spring Boot,采用了“约定优于配置”的...

    Java技术栈
  • Spring面试题(第一期)

    Spring作为现在最流行的java web开发框架,Spring的应用及其原理的深入了解是每个Java开发程序员必经之路,下面10道面试题是Java开发程序员...

    Java技术栈
  • 你必须了解Spring的生态

    Spring不止是提供了IOC、AOP的功能,还提供了大量的基于Spring的项目,拿来用就行了,用于一站式开发,大大降低了开发的难度。 下面列举下主要的一些S...

    Java技术栈
  • 3天两版 Spring Boot 2.2.4 发布!紧急修复Spring Cloud Hoxton.SR1 兼容问题

    Spring Boot 2.2.4 发布了,可以从 repo.spring.io 和 Maven Central 获取。

    冷冷
  • 什么是 Spring MVC?

    Spring MVC 是一个用于构建 Web 应用程序的 Java 框架,遵循 模型 - 视图 - 控制器 设计模式。它实现了一个 Spring 核心框架的所有...

    村雨遥
  • 为什么说即便是新手,也应该学习微服务?

    微服务是当下非常火的话题,出门遇见同行,不会点微服务你可能都不好意思跟别人打招呼,企业的招聘信息中也越来越多地出现对于微服务架构能力的要求,不会点微服务找工作别...

    南风
  • Spring Boot 入门

      Spring 框架是 Java 平台上的一种开源应用框架,提供具有控制反转特性的容器。尽管 Spring 框架自身对编程模型没有限制,但其在 Java 应用...

    Demo_Null
  • Spring Framework 5.0 新特性有这些

    Spring Framework 5.0 是自 2013年12月版本 4 发布之后 Spring Framework 的第一个主发行版。Spring Frame...

    企鹅号小编
  • Spring Framework 5.0 新特性总结!!!

    Spring Framework 5.0 是自 2013年12月版本 4 发布之后 Spring Framework 的第一个主发行版。Spring Frame...

    用户5224393
  • 构建安全SD-WAN的关键:集成与互操作

    人类每次的变革创新都伴随着一定的风险,例如十八世纪六十年代工业革命的兴起,就是一场以机器取代人力,以大规模工厂化生产取代个体工场手工生产的一场生产与科技革命。但...

    周俊辉

扫码关注云+社区

领取腾讯云代金券