一、why

spring boot 在传统 spring 框架的基础上做了创新和优化,将开发人员从以往烦琐的配置工作中解放出来,并提供了大量即插即用的集成化组件,从而解决了各种组件之间复杂的整合过程,大大提高了开发效率,降低了维护成本。

比如, 原本使用的是 spring mvc 框架, 在整个开发过程中,除了需要编写一大堆配置文件、针对每个层次引入专门的开发组件外,还需要独立部署和管理应用服务器。最后,为了对系统的运行状态进行有效监控,还需要引入一些并不好用的外部框架。

而使用了 spring boot 框架,因为它直接解决了使配置 、 编程 、 部署 、 监控 ,好用、简单又高效。

越来越强大的 spring boot 俨然是 java ee 领域的标准开发框架了。熟练掌握 spring boot 中的各项技术组件,并能够在一定程度上掌握其内部运行机制,是从事 java 应用程序开发的基本要求,也是学习 spring cloud 等微服务开发框架的基础。

二、spring 家族技术生态全景图

spring 框架自 2003 年由 rod johnson 设计并实现以来,经历了多个重大版本的发展和演进,已经形成了一个庞大的家族式技术生态圈。目前,spring 已经是 java ee 领域最流行的开发框架,在全球各大企业中都得到了广泛应用。

让我们先来看一下 spring 家族技术生态的全景图。

访问 下spring 的官方网站

从图中可以看到,这里罗列了 spring 框架的七大核心技术体系,分别是微服务架构、响应式编程、云原生、web 应用、serverless 架构、事件驱动以及批处理

这些技术体系各自独立但也有一定交集,例如微服务架构往往会与基于 spring cloud 的云原生技术结合在一起使用,而微服务架构的构建过程也需要依赖于能够提供 restful 风格的 web 应用程序等。

另一方面,在具备特定的技术特点之外,这些技术体系也各有其应用场景。

举个例子

  • 如果我们想要实现日常报表等轻量级的批处理任务,而又不想引入 hadoop 这套庞大的离线处理平台时,使用基于 spring batch 的批处理框架是一个不错的选择
  • 如果想要实现与 kafka、rabbitmq 等各种主流消息中间件之间的集成,屏蔽这些中间件在使用上的差别,那么使用基于 spring cloud stream 的事件驱动架构对外提供了统一的 api, 屏蔽了内部各个中间件在实现上的差异性。

在日常开发过程中,如果构建单块 web 服务,可以采用 spring boot。如果想要开发微服务架构,那么就需要使用基于 spring boot 的 spring cloud,而 spring cloud 同样内置了基于 spring cloud stream 的事件驱动架构。

同时, 特别强调的是响应式编程技术。响应式编程是 spring 5 引入的最大创新,代表了一种系统架构设计和实现的技术方向。因此,我们也将从 spring boot、spring cloud 以及 spring 响应式编程这三个技术体系进行切入,看看 spring 具体能够为我们解决开发过程中的哪些问题。

三、spring framework 的整体架构

当然,所有我们现在能看到的 spring 家族技术体系都是在 spring framework 基础上逐步演进而来的。在介绍上述技术体系之前,我们先简单了解下 spring framework 的整体架构,如下图所示:

【4.x】

四、spring boot 与 web 应用程序

spring boot 构建在 spring framework 基础之上,是新一代的 web 应用程序开发框架。

我们可以通过下面这张图来了解 spring boot 的全貌:

通过浏览 spring 的官方网站,我们可以看到 spring boot 已经成为 spring 中顶级的子项目。自 2014 年 4 月发布 1.0.0 版本以来,spring boot 俨然已经发展为 java ee 领域开发 web 应用程序的首选框架。

先来感受一下使用 spring boot 开发一个 restful风格 的 http 端点所需要做的编码工作,如下所示:

@springbootapplication

@restcontroller

public class demoapplication {
 
    @getmapping("/helloworld")

	public string hello() { 

	    return "hello world!";

	}

 

	public static void main(string[] args) {

        springapplication.run(demoapplication.class, args);

    }

}

一个经典的“hello world”程序,而且使用 spring boot 来构建这样一个支持 restful 风格的 web 应用程序只需要几秒钟。

一旦创建了一个 spring boot 应用程序,并添加类似上面的 demoapplication 类,我们就可以启动 spring boot 内置的 web 服务器并监听 8080 端口,剩余的一切工作 spring boot 都帮你自动完成了。

五、支持运行期内嵌容器(传统 web 容器& 非阻塞式容器)

spring boot 具备了传统 spring 框架所不具备的功能特性,即支持运行期内嵌容器(包含 tomcat、jetty 等支持 servlet 规范的多款传统 web 容器)

在最新的 spring boot 2.x 版本中,还提供了对 netty 以及集成 servlet 3.1+ 的非阻塞式容器的支持。基于运行期内嵌容器机制

开发人员想要启动web 服务只需要使用一行 java –jar 命令就可以了。

六、自动配置

我们还发现 spring boot 的核心功能就是自动配置

我们可以看到 spring boot 并没有像以前使用 spring mvc 一样需要指定一大堆关于 http 请求和响应的 xml 配置。

事实上,spring boot 的运行过程同样还是依赖于 spring mvc,但是它把原本需要开发人员指定的各种配置项设置了默认值,并内置在了运行时环境中,例如默认的服务器端口就是 8080,如果我们不需要对这些配置项有定制化需求,就可以不做任何的处理,采用既定的开发约定即可。这就是 spring boot 所倡导的约定优于配置(convention over configuration)设计理念

七、内置的监控机制

另外,相较传统的 spring 框架,spring boot 的一大亮点是引入了内置的监控机制,这是通过 actuator 组件(常见的包括内存信息、jvm 信息、垃圾回收信息等)来实现的。基于 actuator 组件,一方面我们可以查看包含自动配置在内的应用程序详细信息,另一方面可以实时监控该应用程序的运行时健康状态。

可以看到,spring boot 的上述功能实际上从多个维度简化了 web 应用程序的开关过程,这些维度包含编码、配置、部署和监控等。

八、spring cloud (netflix)与微服务架构

spring cloud 构建在 spring boot 基础之上,它的整体架构图如下所示:

技术组件的完备性是 spring cloud 框架的主要优势,它集成了业界一大批知名的微服务开发组件。spring cloud 的核心组件如下图所示

可以看到,基于 spring boot 的开发便利性,spring cloud 巧妙地简化了微服务系统基础设施的开发过程,spring cloud 包含上图中所展示的服务发现注册、api 网关、配置中心、消息总线、负载均衡、熔断器、数据监控等

九、spring 5 与响应式编程

随着 spring 5 的正式发布,我们迎来了响应式编程(reactive programming)的全新发展时期。spring 5 中内嵌了与数据管理相关的响应式数据访问、与系统集成相关的响应式消息通信以及与 web 服务相关的响应式 web 框架等多种响应式组件,从而极大地简化了响应式应用程序的开发过程和开发难度。

下图展示了响应式编程的技术栈与传统的 servlet 技术栈之间的对比:

从上图可以看到,上图左侧为基于 spring webflux 的技术栈,右侧为基于 spring mvc 的技术栈。我们知道传统的 spring mvc 构建在 java ee 的 servlet 标准之上,该标准本身就是阻塞式和同步的,而 spring webflux 基于响应式流,因此可以用来构建异步非阻塞的服务

在 spring 5 中,选取了 project reactor 作为响应式流的实现库。由于响应式编程的特性,spring webflux 和 project reactor 的运行需要依赖于诸如 netty 和 undertow 等支持异步机制的容器。同时我们也可以选择使用较新版本的 tomcat 和 jetty 作为运行环境,因为它们支持异步 i/o 的 servlet 3.1

下图更加明显地展示了 spring mvc 和 spring webflux 之间的区别和联系:

在基于 spring boot 以及 spring cloud 的应用程序中,spring webflux 和 spring mvc 可以混合进行使用。

十、小结

我们主要围绕 spring boot 框架展开讨论,分别从配置体系、数据访问、web 服务、消息通信、系统安全、系统监控、应用测试等维度对该框架进行深入的剖析,所采用的版本为 2.2.x 版。

系统分析了 spring 家族的技术生态,并重点介绍了 spring boot、spring cloud 和 spring 响应式编程这三大技术体系。从技术演进的过程和趋势而言,这些工具和框架的出现有其必然性。spring boot 是对传统 spring mvc 的改进,spring cloud 基于 spring boot 构建微服务架构,而响应式编程则代表未来技术的发展方向。

到此这篇关于java springboot之spring家族的技术体系的文章就介绍到这了,更多相关spring家族的技术体系内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!