文章目录

  • Spring MVC VS Spring Boot
    • 【HTTP 请求响应过程】
    • 【基于 Spring MVC 的 Web 应用程序开发流程】
    • 【基于 Spring Boot 的 Web 应用程序开发流程】
  • 剖析应用
    • pom依赖
    • 启动类
    • 控制器类
    • 配置文件
  • 案例
    • 整体架构


Spring MVC VS Spring Boot

在介绍基于 Spring Boot 的开发模式之前,让我们先将它与传统的 Spring MVC 进行简单对比.

在典型的 Web 应用程序中,前后端通常采用基于 HTTP 协议完成请求和响应,开发过程中需要完成 URL 地址的映射、HTTP 请求的构建、数据的序列化和反序列化以及实现各个服务自身内部的业务逻辑,如下图所示:

【HTTP 请求响应过程】


我们先来看基于 Spring MVC 完成上述开发流程所需要的开发步骤,如下图所示:

【基于 Spring MVC 的 Web 应用程序开发流程】

上图中包括使用 web.xml 定义 Spring 的 DispatcherServlet、完成启动 Spring MVC 的配置文件、编写响应 HTTP 请求的 Controller 以及将服务部署到 Tomcat Web 服务器等步骤。

基于传统的 Spring MVC 框架开发 Web 应用逐渐暴露出一些问题,比较典型的就是配置工作过于复杂和繁重,以及缺少必要的应用程序管理和监控机制


【基于 Spring Boot 的 Web 应用程序开发流程】


可以看到,它与基于 Spring MVC 的开发流程在配置信息的管理、服务部署和监控等方面有明显不同。Spring Boot 提供了很多新特性,确保了开发过程的简单性,具体体现在编码、配置、部署、监控等多个方面。

  • 首先 Spring Boot 使编码更简单

    只需要在 Maven 中添加一项依赖并实现一个方法就可以提供微服务架构中所推崇的 RESTful 风格接口

  • 其次 Spring Boot 使配置更简单

    它把 Spring 中基于 XML 的功能配置方式转换为 Java Config,同时提供了 .yml 文件来优化原有基于 .properties 和 .xml 文件的配置方案,.yml 文件对配置信息的组织更为直观方便,语义也更为强大

    同时,基于 Spring Boot 的自动配置特性,对常见的各种工具和框架均提供了默认的 starter 组件来简化配置。

  • 接着 ,Spring Boot 使部署更简单

    在Spring Boot 使配置更简单部署方案上,Spring Boot 也创造了一键启动的新模式。

相较于传统模式下的 war 包,Spring Boot 部署包既包含了业务代码和各种第三方类库,同时也内嵌了 HTTP 容器。这种包结构支持 java –jar application.jar 方式的一键启动,不需要部署独立的应用服务器,通过默认内嵌 Tomcat 就可以运行整个应用程序。

  • Spring Boot 使监控更简单

基于 Spring Boot 新提供的 Actuator 组件,开发和运维人员可以通过 RESTful 接口获取应用程序的当前运行时状态并对这些状态背后的度量指标进行监控和报警

例如可以
通过“/env/{name}”端点获取系统环境变量、
通过“/mapping”端点获取所有 RESTful 服务、
通过“/dump”端点获取线程工作状态
通过“/metrics/{name}”端点获取 JVM 性能指标等。


剖析应用

有几个地方需要特别注意,我也在图中做了专门的标注,分别是包依赖、启动类、控制器类以及配置, 接下来分别做一些展开


pom依赖

Spring Boot 提供了一系列 starter 工程来简化各种组件之间的依赖关系。以开发 Web 服务为例,我们需要引入 spring-boot-starter-web 这个工程,而这个工程中并没有具体的代码,只是包含了一些 pom 依赖,如下所示:

  • org.springframework.boot:spring-boot-starter

  • org.springframework.boot:spring-boot-starter-tomcat

  • org.springframework.boot:spring-boot-starter-validation

  • org.springframework.boot:spring-boot-starter-json

  • org.springframework:spring-web

  • org.springframework:spring-webmvc

可以看到,这里包括了传统 Spring MVC 应用程序中会使用到的 spring-web 和 spring-webmvc 组件,因此 Spring Boot 在底层实现上还是基于这两个组件完成对 Web 请求响应流程的构建。


使用 Spring Boot 2.2.4 版本, 它所依赖的 Spring 组件都升级到了 5.X 版本。

在应用程序中引入 spring-boot-starter-web 组件就像引入一个普通的 Maven 依赖一样,如下所示

 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

一旦 spring-boot-starter-web 组件引入完毕,我们就可以充分利用 Spring Boot 提供的自动配置机制开发 Web 应用程序。


启动类

使用 Spring Boot 的最重要的一个步骤是创建一个 Bootstrap 启动类。Bootstrap 类结构简单且比较固化,如下所示:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class OrderApplication {   public static void main(String[] args) {SpringApplication.run(OrderApplication.class, args);}
}

这里引入了一个全新的注解 @SpringBootApplication。

在 Spring Boot 中,添加了该注解的类就是整个应用程序的入口,一方面会启动整个 Spring 容器,另一方面也会自动扫描代码包结构下的 @Component、@Service、@Repository、@Controller 等注解并把这些注解对应的类转化为 Bean 对象全部加载到 Spring 容器中。


控制器类

Bootstrap 类为我们提供了 Spring Boot 应用程序的入口,相当于应用程序已经有了最基本的骨架。接下来我们就可以添加 HTTP 请求的访问入口,表现在 Spring Boot 中也就是一系列的 Controller 类。这里的 Controller 与 Spring MVC 中的 Controller 在概念上是一致的,一个典型的 Controller 类如下所示:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import com.springcss.order.domain.Order;
import com.springcss.order.service.OrderService;@RestController
@RequestMapping(value="orders")
public class OrderController {@AutowiredOrderService orderService;@GetMapping(value = "/{orderId}")public Order getOrderById(@PathVariable Long orderId) {    Order order = orderService.getOrderById(orderId);return order;}}

以上代码中包含了 @RestController、@RequestMapping 和 @GetMapping 这三个注解。其中,

  • @RequestMapping 用于指定请求地址的映射关系

  • @GetMapping 的作用等同于指定了 GET 请求的 @RequestMapping 注解

  • @RestController 注解是传统 Spring MVC 中所提供的 @Controller 注解的升级版,相当于就是 @Controller 和 @ResponseBody注解的结合体,会自动使用 JSON 实现序列化/反序列化操作。


配置文件

在 src/main/resources 目录下存在一个 application.yml 文件,这就是 Spring Boot 中的主配置文件。例如,我们可以将如下所示的端口、服务名称以及数据库访问等配置信息添加到这个配置文件中:

server:port: 8081spring:application:name: orderservice datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/appointmentusername: rootpassword: root

事实上,Spring Boot 提供了强大的自动配置机制,如果没有特殊的配置需求,开发人员完全可以基于 Spring Boot 内置的配置体系完成诸如数据库访问相关配置信息的自动集成。


案例

介绍完了基于 Spring Boot 创建一个 Web 应用的基本流程之后,我们将构建一个系统 Customer Service System , 客户服务系统 来展示 Spring Boot 相关设计理念和各项技术组件。

目的在于演示技术实现过程,不在于介绍具体业务逻辑。所以,我们对案例的业务流程做了高度的简化,但涉及的各项技术都可以直接应用到日常开发过程中。

在 SpringCSS 中,存在一个 customer-service,这是一个 Spring Boot 应用程序,也是主体服务。在该服务中,我们可以将采用经典的分层架构,即将服务分成 Web 层、Service 层和 Repository 层。


整体架构

在客服系统中,我们知道其核心业务是生成客户工单。

为此,customer-service 一般会与用户服务 account-service 进行交互,但因为用户账户信息的更新属于低频事件,所以我们设计的实现方式是 account-service 通过消息中间件的方式将用户账户变更信息主动推送给 customer–service,从而完成用户信息的获取操作。

而针对 order-service,其定位是订单系统,customer-service 也需要从该服务中查询订单信息。SpringCSS 的整个系统交互过程如下图所示

SpringBoot - Spring Boot 应用剖析相关推荐

  1. SpringBoot ——Spring Boot日志配置

    Spring Boot 采用了 slf4j+logback 的组合形式,Spring Boot也提供对JUL.log4j2.Logback提供了默认配置 1.默认日志配置 修改日志默认级别 2.修改日 ...

  2. SpringBoot : Spring Boot中使用数据缓存 spring-boot-starter-cache

    1.美图 2.概述 项目中经常会用到cache技术,Spring boot提供了方便的注解以便我们从重复的cache代码中解放出来. 首先得引入spring-boot-starter-cache这个j ...

  3. SpringBoot - Spring Boot 中的配置体系Profile全面解读

    文章目录 Pre Spring Boot 中的配置体系 配置文件与 Profile 主 application.properties 中指定激活的Profile Profile 配置信息只保存在一个文 ...

  4. springboot tomcat配置_告诉你,Spring Boot 真是个牛逼货!

    现在 Spring Boot 非常火,各种技术文章,各种付费教程,多如牛毛,可能还有些不知道 Spring Boot 的,那它到底是什么呢?有什么用?今天给大家详细介绍一下. Spring Boot ...

  5. java开源springboot项目_使用Spring Boot的10多个免费开源项目

    这是一个真实的应用程序,为  Spring.io  网站提供支持.它正在生产中,每天都有成千上万的用户使用. 我强烈建议这个项目,你将学习有关Spring框架生态系统,Elasticsearch,Gr ...

  6. SpringBoot进击 | 一浅出:Spring Boot简单快速上手书

    为了后继的 Spring Cloud 学习和进阶,我们需要先行了解 Spring Boot. 1.前言 1.1 认识 Spring Boot Spring Boot 是由 Pivotal 团队提供的全 ...

  7. 项目从Spring转到SpringBoot Migrating from Spring to Spring Boot

    原文链接:Migrating from Spring to Spring Boot 1. Overview 概述 In this article, we're going to take a look ...

  8. 告诉你,Spring Boot 真是个牛逼货!

    2019独角兽企业重金招聘Python工程师标准>>> 现在 Spring Boot 非常火,各种技术文章,各种付费教程,多如牛毛,可能还有些不知道 Spring Boot 的,那它 ...

  9. spring boot 1.5.4 整合 mybatis(十二)

    上一篇:spring boot 1.5.4 整合log4j2(十一) Spring Boot集成Mybatis 更多更详细的配置参考文件:application.properties和<Spri ...

最新文章

  1. 【图论专题】单源最短路的扩展应用
  2. 酒店用机器学习,预测哪些客人会放鸽子
  3. 链表的排序(Python和C实现)
  4. how to resolve error message java.lang.ClassNotFoundException: org.springframework
  5. Java学习笔记_继承
  6. 《JavaScript DOM编程艺术》笔记
  7. 常用软件包和环境配置(机器学习)
  8. [Angularjs]国际化
  9. 2 环境设置_VS Code 虚拟环境设置
  10. 程序员给小姐姐修电脑的最佳地方和姿势
  11. Venture Sprint创新冲刺:源自硅谷设计 感知创新力量
  12. TensorFlow by Google Machine Learning Foundations: Ep #8 - Tokenization for Natural Language Process
  13. 在线计算机进制换算,进制转换计算器
  14. 度中心性(degree)、接近中心性(closeness)和中介中心性(betweenness)的理解
  15. 小生不才,真实记录爬取链家网2584条租房信息,聊一聊框架爬取大量数据防止被ban的事
  16. Kaggle泰坦尼克预测(完整分析)
  17. 二进制、八进制、十六进制的写法
  18. 经典语录_生命的智慧
  19. transPlotR 优雅的绘制基因转录本结构
  20. Linux-002-常用命令02

热门文章

  1. c语言课设学生管理程序,c语言程序课程设计学生成绩管理程序.doc
  2. win10怎么用Linux命令,教你Windows10系统使用Linux命令的技巧
  3. pip 安装 tensorflow_TensorFlow 学习笔记2-1:ubuntu下安装pip3amp;tensorflowamp;opencv
  4. Android:安卓APP开发显示一个美女,安卓APP开发显示两个美女
  5. android 之Fragment的详解
  6. C ++ 函数模板求三个数的最大和
  7. Docker(基础理解)
  8. 强化学习笔记1:强化学习概述
  9. 深度学习核心技术精讲100篇(六十一)-TikTok抖音国际版留存背后的数据和算法推演
  10. 平台信赖度成为双十一影响消费者购买决策的重要因素