1.2 Spring Boot的特点
Spring团队曾经为开发者提供了无数的便利,其提供的IOC和AOP两大特性一直为广大开发者所“深爱”。当然,Spring框架还提供了很多优秀的特性,在这里就不一一介绍了。但是,在传统Spring框架中有一个重大的缺点,那就是在配置的时候很复杂,需要重复地进行一些配置。Spring团队可能感受到了这一点,在2014年,Spring团队发布了Spring Boot框架。另外,官网首页的Spring Boot部分也介绍了诸多Spring Boot的特点,如图1-2所示。本节将逐一介绍Spring Boot框架的特点。
图1-2 Spring Boot官网简介(图片来源于Spring官网:http://spring.io/)
1.2.1 快速构建项目
Spring Boot具有多种快速构建项目的方式,如下面几种形式:
(1)使用Eclipse(MyEclipse)可以利用创建Maven项目的方式创建Spring Boot项目。当然,如果在Eclipse中安装了Spring Tools,就可以直接创建Spring Starter Project。
(2)使用IntelliJ IDEA,可以利用创建Spring Initializr的方式创建Spring Boot项目,在后续章节会详细介绍这种方式的过程。
(3)使用Spring Tool Suite,可以直接新建Spring Starter Project项目,过程类似Eclipse创建Spring Boot项目。
(4)使用官方文档创建项目,在Spring官方文档上面提供了一种在线生成Spring Boot项目的方式,首先访问Spring官方快速构建地址(官网地址:https://start.spring.io/),在这个页面上选择对应版本、构建工具等,填写完成后单击Generate Project按钮,即可在本地下载一个Spring Boot项目的压缩包。
当然,可能还有很多方式快速构建项目,这里就不一一介绍了。笔者在这里推荐使用IntelliJ IDEA开发项目,个人感觉这个开发工具还是很强大的,并且提供了很多插件供开发者使用,读者也可以根据自己的喜好进行选择,毕竟适合自己的才是最好的。
1.2.2 嵌入式Web容器
在传统Java Web项目中,当项目开发完成之后,还需要配置所需的Web容器(诸如Tomcat或者WebLogic之类的Web容器)。但是在Spring Boot搭建的项目中,内部提供了几种Web容器,如Tomcat、Jetty和Undertow。在Spring Boot 1.x中默认为Tomcat;Spring Boot 2.x中则分为两种情况,引入spring-boot-starter-web依赖为Tomcat,引入spring-boot-starter-webflux依赖则为Netty。当然,也支持使用之前指出的几种Web容器,开发者只需要根据场景选择适合的Starter来获取一个默认配置好的容器即可,当启动成功后,应用一个默认端口为8080的HTTP服务。
1.2.3 易于构建任何应用
Spring Boot提供了一个强大的starter依赖机制,实质上Spring团队将Spring Boot框架整合了一切常用的maven依赖,使Spring Boot想要整合对应依赖,就要将需要的依赖全部引入。比如,需要在项目中使用Web,也就是我们常说的Spring MVC,如果是原有的maven项目,就需要引入很多依赖才能完成这个简单的需求。但是在Spring Boot项目中,我们只需要在maven依赖中加入spring-boot-starter-web依赖即可,是不是很简单?这里再举一个例子,比如项目中需要使用MySQL数据库,这里只需要加入MySQL依赖,并且在配置文件中配置数据库信息就可以正常使用。
1.2.4 自动化配置
这个特点是上一个特点的延伸,在应用程序中引入依赖之后,其实还有一个强大之处在于Spring Boot应用会根据引入的依赖提供一些默认的配置供我们使用,如果需要修改,那么只需要在配置文件中修改对应的配置即可完成需求。这里还是以Spring MVC为例,传统Spring MVC项目需要配置对应的诸如ApplicationContext.xml(Spring配置文件)、ApplicationContext-mvc.xml(Spring MVC配置文件),而在Spring Boot中,这些需要的配置已经为我们默认配置了一套,不需要再进行配置了。比如,我们要加入Web应用程序根路径test的话,只需要在application.properties(Spring Boot应用程序默认配置文件)中加入server.servlet.context-path=/test即可。
1.2.5 开发者工具
在开发Web应用的时候,总会有一个困扰我们的问题,修改代码总是伴随不断重启项目,需要不断地断开Web容器,再重启来测试我们的代码。在Spring Boot应用中提供了开发者工具(spring-boot-devtools),当我们重新编译类文件的时候,开发者工具会自动替我们重启应用,无须手动单击重启。
1.2.6 强大的应用监控
在生产环境中,应用的各项指标监控更是必不可少。在Spring Boot应用中提供了一个spring-boot-starter-actuator(以下简称Spring Boot-Actuator)来供我们查看应用的各项指标,如health(健康检查)、dump(活动线程)、env(环境属性)、metrics(内存,CPU等)等指标,以监控我们的应用,同时可以配合使用spring-boot-admin-starter-server(以下简称Spring Boot-Admin)监控我们的项目。Spring Boot-Admin可以在利用监控Spring Boot-Actuator端点的同时监控所有微服务应用的健康状态,如果出现异常,就可以向维护人员发送邮件或者以其他方式给予告警。不只是这样,就连监控神器Prometheus也可以通过简单的配置接入Spring Boot应用程序中。
1.2.7 默认提供测试框架
Spring Boot应用在创建项目之后会默认为我们创建测试类的文件,实质上就是引入spring-boot-starter-test依赖,然后可以通过它对各种场景进行测试,足够满足对项目的测试需求。
1.2.8 可执行Jar部署
由于Spring Boot项目内嵌Web容器,因此提供了一种特殊部署方式,可以直接利用Maven或者Gradle对Spring Boot项目进行打包,生成一个JAR文件,然后直接在具备环境的服务器或本地环境中利用java -jar xx.jar执行JAR文件,使应用能够快速运行。
1.2.9 IDE多样性
正如1.2.1小节介绍的,Spring Boot支持的开发工具很多,无论是曾经几乎所有开发者都使用的Eclipse一族,还是现在流行的IntelliJ IDEA,又或者是专门为开发Spring系列而生的Spring Tool Suite都是开发Spring Boot应用的不二法宝。