通过本篇文章您可以了解到以下内容:
· Spring Boot 发展历史
· Spring Boot 核心特性
· Spring Boot 版本迁移
· 总结
Spring Boot 发展历史
首先让我们来看看,什么是 Spring Boot 呢? 简单的来说 Spring Boot 就是一个 Java Web 开发框架。Spring Boot 是基于 Spring 开发的,与此同时与 Spring 框架紧密结合,从而极大提升了 Java 开发者的开发体验。
我们知道,随着 Spring 不断的发展壮大,涉及的领域越来越多,从而对于项目整合时开发者需要配置的文件数量也随之增加。同时也加大了开发者的学习曲线。Spring Boot 正是在这样的一个背景下被创造出来的。当我们谈到Spring Boot 的发展历史时,我们首先要从一个 Jira 说起。
早在2012年的10月12日,Mike Youngstrom 在 Spring jira 中提交了一个名为Improved support for 'containerless' web application architecturesSpring (Spring 框架中支持无容器 Web 应用程序体系结构)的请求。在这个请求中 Mike Youngstrom 对现有开发人员需要面临克服的学习曲线进行了一一阐述:
英文描述:
· web.xml and other Servlet oriented configuration concepts
· war directory structure
· Container implementation specific items (e.g. ports, thread pools, etc.)
· Complex Classloading hierarchies
· Monitoring and management facilities configured outside of the application
· Logging facilities
· Configuration of application context roots
· So forth
中文描述:
· web.xml以及其他面向Servlet配置的概念。
· war目录结构
· 容器实现特定项(如端口、线程池等)
· 复杂类加载层次结构
· 应用程序外部配置的监控和管理设施
· 日志工具
· 应用程序上下文的配置
同时 Mike Youngstrom 指出为了实现这种简化,认为 Spring 不需要创建一个全新的 http引擎。它可以简单地利用嵌入式 servlet 容器,如 Jetty。尽管它需要尽可能多地抽象配置。
Jira的详细内容可以识别二维码,参考以下内容:
两年后也就是2014年的4月 Spring Boot 1.0.0 正式发布,从那以后一些Spring Boot 的版本也随之而出,以下是关于各个 Spring Boot 主要版本发布的说明,识别二维码立即查看:
( Spring boot 1.1 – Spring Boot 2.4)
(Spring Boot 2.5)
(Spring Boot 2.6)
(Spring Boot 2.7)
正是由于 Spring Boot 的简单、快速、开箱即用等特性,使得 Java 开发人员能够快速大规模采用,并且大大降低了学习曲线。正如JRebel 的 2022 年开发者生产力报告中提到的那样,Spring Boot 已经作为 Java 开发微服务首选的框架,并且占有主导位置。
(jrebel-2022-java-developer-productivity-report)
Spring Boot 核心特性
核心特性一
遵循约定大于配置的核心思想。使用Spring Boot 我们只需要进行非常少的配置,而且大多数的情况可以使用默认配置即可。
核心特性二
相比传统 Spring 项目例如 Spring MVC,我们可以完全不使用 XML 配置,只需要使用自动配置以及 Java Config 方式即可。
核心特性三
内嵌 Servlet 容器,降低了对环境的依赖程度,以及大大减少了学习成本,相比war方式的部署,可以直接使用 jar 的方式进行部署,同时可以通过简单的命令 java -jar xx.jar 进行启动。
核心特性四
依赖管理 Spring Boot 提供 starter 机制,从而大大简化了 Maven 配置。此外可以通过识别二维码内容:
进行项目构建。通过选择添加项目所需要的依赖,从而帮助开发者快速构建项目骨架,例如常用的 spring-boot-starter-web 等依赖。
核心特性五
应用的可观测性,Spring Boot 提供了对当前应用可观测的解决方案,也就是我们熟知的actuator。实现这种功能,只需要添加spring-boot-starter-actuator,我们就可以获取面向生产就绪的监控数据,如应用运行时状态等,从而可以帮助开发和运维人员快速定位系统问题。
核心特性六
对 Spring 自动装配,Spring Boot 会为 jar包的类进行自动对 Bean 的装配。这样会极大减少为们需要使用的配置。这种操作可以覆盖大多数的开发场景,如果实际开发过程中我们需要配置特定的 Bean,可以使用Spring Boot 自定义自动配置的能力。
Spring Boot 版本迁移
首先我们来看看 Spring Boot 官方对于版本发布的说明:
可以看到的是,主要版本的发布周期是每六个月一次,同时对于每一个主要的版本,无论是开源社区的版本还是商业支持的版本都会有与之对应的 End of Support 日期。以下就是主要版本的时间周期情况。
此外一个主要的新版本发布可能会带来一些新的功能以及老旧 Bug 的修复。那么如果选择进行新版本的升级,最佳升级的路径是怎样的呢?关于这个问题,大体可以理解分为两类:
第一类: Spring Boot 1.x的版本到Spring Boot 2.0
对于 Spring Boot 1.x 的版本目前早已经不再维护,如果需要进行版本的升级,可以参考官方给出的迁移实践路径,识别二维码,查看对应内容:
第二类: Spring Boot 2.x 版本的升级
比如,是否因为版本的升级,修改或者重命名一些配置文件,亦或有一些依赖已经在新的版本中进行了移除? 正是因为诸如此类的问题,从 Spring Boot 的角度,提供了一个关于迁移的开源项目,我们称之为spring-boot-properties-migrator。
如果需要启用该特性需要将下方的依赖添加到所对应的工程当中(以 Maven 为例)
对于这种特性的详细说明,我们可以在对应的Spring Boot 官方文档中查看,识别二维码,立即查看以Spring Boot2.7.3 文档进行说明内容。
总结
回顾全篇内容,整体包括以下内容:
· 首先在开篇我们对 Spring Boot 的发展历史有了一个全面清晰的了解。
· 其次我们对 Spring Boot 的核心特性进行了深入展开的讨论。
· 最后在关于 Spring Boot 版本迁移的方面给出了最佳实践路径。
至此我们可以利用 Spring Boot 来构建每一个微服务,那么在微服务架构体系中我们遇到的常见问题又如何解决呢? 比如微服务体系下注册中心的搭建、微服务之间调用的负载均衡、熔断、降级、限流等,这些问题 Spring又会给出哪些开箱即用的解决方案呢? 在下一章节中我们会深入了解 Spring Cloud,微服务架构的解决方案。敬请期待!
参考链接:
1.https://github.com/spring-projects/spring-boot
2.https://docs.spring.io/spring-boot/docs/2.7.3/reference/pdf/spring-boot-reference.pdf
3.https://www.jrebel.com/resources/java-developer-productivity-report-2022
内容来源|公众号:VMwareTanzu 云原生