Spring Boot 2.0 的快速入门(图文教程)
大家都知道,Spring Framework 是 Java/Spring 应用程序跨平台开发框架,也是 Java EE(Java Enterprise Edition) 轻量级框架,其 Spring 平台为 Java 开发者提供了全面的基础设施支持。 虽然 Spring 基础组件的代码是轻量级,但其配置依旧是重量级的。
那是怎么解决了呢?当然是 Spring Boot,Spring Boot 提供了新的编程模式,让开发 Spring 应用变得更加简单方便。本书将会由各个最佳实践工程出发,涉及 Spring Boot 开发相关的各方面。下面先了解下 Spring Boot 框架。
1.1 Spring Boot 是什么
Spring Boot (Boot 顾名思义,是引导的意思)框架是用于简化 Spring 应用从搭建到开发的过程。应用开箱即用,只要通过一个指令,包括命令行 java -jar
、SpringApplication
应用启动类 、 Spring Boot Maven 插件等,就可以启动应用了。另外,Spring Boot 强调只需要很少的配置文件,所以在开发生产级 Spring 应用中,让开发变得更加高效和简易。目前,Spring Boot 版本是 2.x 版本。
1.1.1 Spring Boot 2.x 特性
Spring Boot 2.x 具有哪些生产的特性呢?常用特性如下:
- SpringApplication 应用类
- 自动配置
- 外化配置
- 内嵌容器
- Starter 组件
还有对日志、Web、消息、测试及扩展等支持。
SpringApplication
SpringApplication
是 Spring Boot 应用启动类,在 main()
方法中调用 SpringApplication.run()
静态方法,即可运行一个 Spring Boot 应用。简单使用代码片段如下:
public static void main(String[] args) {
SpringApplication.run(QuickStartApplication.class, args);
}
Spring Boot 运行的应用是独立的一个 Jar 应用,实际上在运行时启动了应用内部的内嵌容器,容器初始化 Spring 环境及其组件并启动应用。也可以使用 Spring Boot 开发传统的应用,只要通过 Spring Boot Maven 插件将 Jar 应用转换成 War 应用即可。
自动配置
Spring Boot 在不需要任何配置情况下,就直接可以运行一个应用。实际上,Spring Boot 框架的 spring-boot-autoconfigure
依赖做了很多默认的配置项,即应用默认值。这种模式叫做 “自动配置”。Spring Boot 自动配置会根据添加的依赖,自动加载依赖相关的配置属性并启动依赖。例如,默认用的内嵌式容器是 Tomcat ,端口默认设置为 8080。
外化配置
Spring Boot 简化了配置,在 application.properties 文件配置常用的应用属性。Spring Boot 可以将配置外部化,这种模式叫做 “外化配置”。将配置从代码中分离外置,最明显的作用是只要简单地修改下外化配置文件,就可以在不同环境中,可以运行相同的应用代码。
内嵌容器
Spring Boot 启动应用,默认情况下是自动启动了内嵌容器 Tomcat,并且自动设置了默认端口为 8080。另外还提供了对 Jetty、Undertow 等容器的支持。开发者自行在添加对应的容器 Starter 组件依赖,即可配置并使用对应内嵌容器实例。
Starter 组件
Spring Boot 提供了很多 “开箱即用” 的 Starter 组件。Starter 组件是可被加载在应用中的 Maven 依赖项。只需要在 Maven 配置中添加对应的依赖配置,即可使用对应的 Starter 组件。例如,添加 spring-boot-starter-web
依赖,就可用于构建 REST API 服务,其包含了 Spring MVC 和 Tomcat 内嵌容器等。
开发中,很多功能是通过添加 Starter 组件的方式来进行实现。那么,Spring Boot 2.x 常用的 Starter 组件有哪些呢?
1.1.2 Spring Boot 2.x Starter 组件
Spring Boot 官方提供了很多 Starter 组件,涉及 Web、模板引擎、SQL 、NoSQL、缓存、验证、日志、测试、内嵌容器,还提供了事务、消息、安全、监控、大数据等支持。前面模块会在本书中一一介绍,后面这些模块本书不会涉及,如需自行请参看 Spring Boot 官方文档。
每个模块会有多种技术实现选型支持,来实现各种复杂的业务需求:
- Web:Spring Web、Spring WebFlux 等
- 模板引擎:Thymeleaf、FreeMarker、Groovy、Mustache 等
- SQL:MySQL 、H2 等
- NoSQL:Redis、MongoDB、Cassandra、Elasticsearch 等
- 验证框架:Hibernate Validator、Spring Validator 等
- 日志框架:Log4j2、Logback 等
- 测试:JUnit、Spring Boot Test、AssertJ、Mockito 等
- 内嵌容器:Tomcat、Jetty、Undertow 等
另外,Spring WebFlux 框架目前支持 Servlet 3.1 以上的 Servlet 容器和 Netty,各种模块组成了 Spring Boot 2.x 的工作常用技术栈,如图 1-1 所示。
图 1-1 Spring Boot 技术架构
正如白猫黑猫,能抓住老鼠的就是好猫。在上述技术选型中,需要为公司业务的要求和团队技能选择最有效最合适的设计方案、架构和编程模型。
1.1.3 Spring Boot 应用场景
Spring Boot 模块众多,代表着应用场景也非常广泛,包括 Web 应用、SOA 及微服务等。在 Web 应用中,Spring Boot 封装了 Spring MVC 即可以提供 MVC 模式开发传统的 Web,又可以开发 REST API ,来开发 Web、APP、Open API 各种应用。在 SOA 及微服务中,用 Spring Boot 可以包装每个服务,本身可以提供轻量级 REST API 服务接口。也可以整合流行的 RPC 框架(Dubbo 等),提供 RPC 服务接口,只要简单地加入对应的 Starter 组件即可。在微服务实战中,推荐使用 Spring Cloud,是一套基于 Spring Boot 实现分布式系统的工具,适用于构建微服务。
上面从组件和特性两方面介绍了 Spring Boot 2.x,下面快速入门去了解 Spring Boot 2.x 的基本用法。
1.2 快速入门工程
在搭建一个 Spring Boot 工程应用前,需要配置好开发环境及安装好开发工具:
- JDK 1.8+
Spring Boot 2.x 要求 JDK 1.8 环境及以上版本。另外,Spring Boot 2.x 只兼容 Spring Framework 5.0 及以上版本。 - Maven 3.2+
为 Spring Boot 2.x 提供了相关依赖构建工具是 Maven,版本需要 3.2 及以上版本。使用 Gradle 则需要 1.12 及以上版本。本书使用 Maven 对 Spring Boot 工程进行依赖和构建管理。 - IntelliJ IDEA
IntelliJ IDEA (简称 IDEA)是常用的开发工具,也是本书推荐使用的。同样使用 Eclipse IDE,也能完成本书的实践案例。另外,本书的工程都会在 GitHub 上开源,如需要请自行安装 Git 环境。
注意:
JDK 安装、Maven 安装、Git 安装和 IntelliJ IDEA 开发工具安装详解,见附录 A