分布式微服务架构:原理与实战
上QQ阅读APP看书,第一时间看更新

2.3 Spring Boot简单介绍

Spring Boot是目前流行的微服务框架,倡导“约定优先于配置”,其设计目的是用来简化新Spring应用的初始化搭建以及开发过程。Spring Boot是一个典型的“核心+插件”的系统架构,提供了很多核心的功能,比如自动化配置、提供starter简化Maven配置、内嵌Servlet容器、应用监控等功能,让我们可以快速构建企业级应用程序。Spring Boot使编码变得简单,使配置变得简单,使部署变得简单,使监控变得简单。

2.3.1 Spring Boot核心功能及特性

Spring Boot提供的特性如下:

(1)遵循习惯优于配置的原则

Spring Boot的配置都在application.properties中,但是并不意味着在Spring Boot应用中就必须包含该文件。application.properties配置文件包含大量的配置项,而大多数配置项都有其默认值,很多配置项不用我们去修改,使用默认值即可。这类行为叫作“自动化配置”。

(2)提供了“开箱即用”的Spring插件

Spring Boot提供了大量的Starter,当我们需要整合其他技术(比如Redis、MQ等)时,只需要添加一段Maven依赖配置即可开启使用。每个Starter都有自己的配置项,而这些配置都可以在application.properties配置文件中进行统一配置,例如常用的spring-boot-starter-web、spring-boot-starter-tomcat、spring-boot-starter-actuator等。

(3)内嵌Servlet容器

传统的项目都需要将项目打包成War包部署到Web服务器,比如Tomcat、Jetty、Undertow。而Spring Boot应用程序启动后会在默认端口8080下启动嵌入式Tomcat,执行Spring Boot项目的主程序main()函数,便可以快速运行项目。

(4)倡导Java Config

Spring Boot可以完全不使用XML配置,并倡导我们使用Java注解方式开发项目。

(5)多环境配置

项目开发过程中,项目不同的角色会使用不同的环境,比如开发人员会使用开发环境,测试人员会使用测试环境,性能测试会使用性能测试环境,项目开发完成之后会把项目部署到线上环境,等等。不同的环境往往会连接不同的MySQL数据库、Redis缓存、MQ消息中间件等。环境之间相互独立与隔离才不会相互影响。隔离的环境便于部署,提高工作效率。假如项目my-spring-boot需要3个环境:开发环境、测试环境、性能测试环境。我们复制my-spring-boot项目配置文件application.properties,分别取名为application-dev.properties、application-test.properties、application-perform.properties,作为开发环境、测试环境、性能测试环境。多环境的配置文件开发完成之后,我们在my-spring-boot的配置文件application.properties中添加配置激活选项,具体代码如下所示:

     ### 激活开发环境配置
     spring.profiles.active=dev
     如果我们想激活测试环境的配置,可修改为:
     ### 激活测试环境配置
     spring.profiles.active=test
     如果我们想激活性能测试环境的配置,可修改为:
     ### 激活性能测试环境配置
     spring.profiles.active=test

(6)提供大量生产级特性

Spring Boot提供大量的生产级特性,例如应用监控、健康检查、外部配置和核心指标等。我们可以给Spring Boot应用发送/metrics请求获取JSON数据,该数据包含内存、Java堆、类加载器、处理器、线程池等信息。我们还能在Java命令(备注:java -jar xxx.jar)上直接运行Spring Boot应用,并带上外部配置参数,这些参数将覆盖已有的默认配置参数。我们甚至可以通过发送一个URL请求去关闭Spring Boot应用。Spring Boot提供了基于HTTP、SSH、Telnet等方式对运行时的项目进行监控。

2.3.2 Spring Boot的缺点

Spring Boot为我们带来诸多便利的同时也带来了如下缺点:

  • 高度集成,开发人员不知道底层实现。
  • 如果开发人员不了解Spring Boot底层,项目出现问题就会很难排查。
  • 将现有或传统的Spring Framework项目转换为Spring Boot应用程序相对来说比较困难和耗时。Spring Boot适用于全新Spring项目。
  • Spring Boot整合公司自研的框架和组件相对比较麻烦,例如Spring Boot整合公司自研的RPC框架等。