章节 II. 新手入门

如果你刚开始学习 Spring Boot 或通常所说的 Spring,请先阅读这一部分。这部分回答了基本的 “what?”、“how?”、“why?” 问题。它包含了 Spring Boot 的介绍以及安装说明。我们将会通过构建你的第一个 Spring Boot 应用,来讨论一些需要遵循的核心原则。

8. 介绍 Spring Boot

Spring Boot 使创建独立的、产品级的基于 Spring 的可运行应用变得更容易。我们使用传统的 Spring 平台和第三方库,因此你只需要稍作改变就可以使用。大多数 Spring Boot 应用只需要很少的 Spring 配置。

你可以用 Spring Boot 来创建使用 java -jar 启动或更传统的 war 包来部署的 Java 应用。我们也提供了运行 “spring scripts” 的命令行工具。

我们的主要目标是:

  • 为所有 Spring 开发者提供一个快速并易用的入门体验。
  • 坚持开箱即用,并可以马上更改不满足需求的默认设置。
  • 为项目提供一系列常用的非功能性特性相关的类 (例如:嵌入式服务器、安全、监控、健康检查、外部配置)。
  • 绝对没有 XML 配置的代码产生和需求。

9. 系统要求

Spring Boot 2.1.0.BUILD-SNAPSHOT 需要 Java 8 或 9 和 Spring Framework 5.1.0.RELEASE 及以上。

为下面的构建工具提供明确的构建支持:

构建工具 版本

Maven

3.3+

Gradle

4.4+

9.1 Servlet 容器

Spring Boot 支持以下嵌入式 servlet 容器:

名称 Servlet 版本

Tomcat 9.0

4.0

Jetty 9.4

3.1

Undertow 2.0

4.0

你也可以部署 Spring Boot 应用到任何兼容 Servlet 3.1+ 的容器。

10. 安装 Spring Boot

Spring Boot 可以和传统的 Java 开发工具一起使用,也可作为一个命令行工具来进行安装。不管怎样,你将需要 Java SDK v1.8 或更高版本。你应该在开始之前检查当前安装的 Java 版本:

$ java -version

如果你是 Java 开发的新手,或只想尝试 Spring Boot,你可以先试一下 Spring Boot CLI (Command Line Interface)。否则,请阅读传统的安装说明。

10.1 Java 开发者的安装说明

你可以像其它的标准 Java 库一样使用 Spring Boot。只需要在你的类路径上包含恰当的 spring-boot-*.jar 文件即可。Spring Boot 不需要任何特定的工具集成,因此你可以使用任何 IDE 或文本编辑器。Spring Boot 应用没有什么特别的,你可以像其它的 Java 程序一样来运行和调试。

尽管你可以只拷贝 Spring Boot 的 jar,但通常我们建议你使用一个支持依赖管理的构建工具(例如 Maven 或 Gradle)。

10.1.1 Maven 安装

Spring Boot 兼容 Apache Maven 3.3 或以上。如果你没有安装 Maven,可以根据 maven.apache.org 上的说明来安装。

[Tip] Tip

在大多数操作系统上,都可以通过包管理器来安装 Maven。如果你使用 OSX Homebrew,请尝试一下 brew install maven。Ubuntu 用户可以运行 sudo apt-get install maven。使用 Chocolatey 的 Windows 用户可以用高级 (administrator) 权限运行 choco install maven。

Spring Boot 依赖使用 org.springframework.boot groupId。通常你的 Maven POM 文件将继承 spring-boot-starter-parent 项目并声明依赖一个或多个启动器。Spring Boot 也提供一个可选的 Maven 插件 来创建可执行的 jar。

下面的列展示了一个典型的 pom.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.example</groupId>
	<artifactId>myproject</artifactId>
	<version>0.0.1-SNAPSHOT</version>

	<!-- Inherit defaults from Spring Boot -->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.0.BUILD-SNAPSHOT</version>
	</parent>

	<!-- Add typical dependencies for a web application -->
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	</dependencies>

	<!-- Package as an executable jar -->
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

	<!-- Add Spring repositories -->
	<!-- (you don't need this if you are using a .RELEASE version) -->
	<repositories>
		<repository>
			<id>spring-snapshots</id>
			<url>https://repo.spring.io/snapshot</url>
			<snapshots><enabled>true</enabled></snapshots>
		</repository>
		<repository>
			<id>spring-milestones</id>
			<url>https://repo.spring.io/milestone</url>
		</repository>
	</repositories>
	<pluginRepositories>
		<pluginRepository>
			<id>spring-snapshots</id>
			<url>https://repo.spring.io/snapshot</url>
		</pluginRepository>
		<pluginRepository>
			<id>spring-milestones</id>
			<url>https://repo.spring.io/milestone</url>
		</pluginRepository>
	</pluginRepositories>
</project>
[Tip] Tip

spring-boot-starter-parent 是使用 Spring Boot 的一种极好的方式,但它并不能适用于所有情况。有时你可能需要继承一个不同的父 POM,或者你可能不喜欢我们的默认设置。在这些情况下,请参阅  13.2.2 小节, “ 不继承父 POM 使用 Spring Boot”,来获得一种可替代的解决方案,它使用了 import 作用域。

10.1.2 Gradle 安装

Spring Boot 兼容 Gradle 4.4 和更新。如果你没有安装 Gradle,可以根据 www.gradle.org 上的说明来安装。

Spring Boot 依赖项可以用 org.springframework.boot group来声明。通常你的项目将会声明依赖于一个或多个启动器。Spring Boot 也提供一个有用的 Gradle 插件 来简化声明依赖和创建可执行的 jar。

Gradle Wrapper

当你需要构建一个工程时,Gradle Wrapper 提供了一种很好的方式来获得 Gradle。它是一小段脚本和库,并随着你的代码一起提交来引导构建过程。更多详细信息请参阅 docs.gradle.org/4.2.1/userguide/gradle_wrapper.html。

下面的示例展示了一个典型的 build.gradle 文件:

buildscript {
	repositories {
		jcenter()
		maven { url 'https://repo.spring.io/snapshot' }
		maven { url 'https://repo.spring.io/milestone' }
	}
	dependencies {
		classpath 'org.springframework.boot:spring-boot-gradle-plugin:2.1.0.BUILD-SNAPSHOT'
	}
}

apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

jar {
	baseName = 'myproject'
	version =  '0.0.1-SNAPSHOT'
}

repositories {
	jcenter()
	maven { url "https://repo.spring.io/snapshot" }
	maven { url "https://repo.spring.io/milestone" }
}

dependencies {
	compile("org.springframework.boot:spring-boot-starter-web")
	testCompile("org.springframework.boot:spring-boot-starter-test")
}

10.2 安装 Spring Boot CLI

Spring Boot CLI (Command Line Interface) 是一个命令行工具,可以用来快速搭建基于 Spring 的原型。它允许你运行 Groovy 脚本,这意味着你有一个熟悉的类 Java 语法,而且没有很多的样板代码。

你不需要用 CLI 来使用 Spring Boot,但它一定是顺利获得 Spring 应用程序的最快方式。

10.2.1 手动安装

你可以从 Spring 软件仓库下载 Spring CLI 发行版:

  • spring-boot-cli-2.1.0.BUILD-SNAPSHOT-bin.zip
  • spring-boot-cli-2.1.0.BUILD-SNAPSHOT-bin.tar.gz

也可以获取最新的 snapshot 版。

下载完成后,请按照解压文件中的 INSTALL.txt 介绍文件来安装。总结:bin/ 目录的 .zip 文件中有一个 spring 脚本(Windows 中是 spring.bat)。或者,你可以使用 java -jar 运行 .jar 文件(这个脚本帮你确保正确设置类路径)。

10.2.2 使用 SDKMAN! 安装

SDKMAN! (The Software Development Kit Manager) 能用来管理各种二进制 SDK 的多个版本, 包括 Groovy 和 Spring Boot CLI。从 sdkman.io 获取 SDKMAN! 并安装 Spring Boot :

$ sdk install springboot
$ spring --version
Spring Boot v2.1.0.BUILD-SNAPSHOT

如果你正在使用 CLI 中的开发特性,并希望能方便地访问你刚刚构建的版本,请使用下面的命令:

$ sdk install springboot dev /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-2.1.0.BUILD-SNAPSHOT-bin/spring-2.1.0.BUILD-SNAPSHOT/
$ sdk default springboot dev
$ spring --version
Spring CLI v2.1.0.BUILD-SNAPSHOT

这将会安装一个名为 dev 的本地 spring 实例。它指向你的目标构建位置,因此你每次重新构建 Spring Boot,spring 将是最新的。

运行下面的命令你将会看到:

$ sdk ls springboot

================================================================================
Available Springboot Versions
================================================================================
> + dev
* 2.1.0.BUILD-SNAPSHOT

================================================================================
+ - local version
* - installed
> - currently in use
================================================================================

10.2.3 使用 OSX Homebrew 安装

如果你在 Mac 上使用 Homebrew,你可以使用下面的命令安装 Spring Boot CLI:

$ brew tap pivotal/tap
$ brew install springboot

Homebrew 会在 /usr/local/bin 安装 spring。

[Note] Note

如果你没有看到对应的方法,可能是你安装的 brew 过时了。请执行 brew update 并重试一次。

10.2.4 使用 MacPorts 安装

如果你在 Mac 上使用 MacPorts,你可以使用下面的命令安装 Spring Boot CLI:

$ sudo port install spring-boot-cli

10.2.5 命令行实现

Spring Boot CLI 附带的脚本为 BASH 和 zsh shells 提供了命令行实现。你可以在任何 shell 中 source 脚本(也称为 spring),或将它放在用户或系统范围内的 bash 完成初始化。在 Debian 系统中系统范围内的脚本是在 /shell-completion/bash 目录中,当新 shell 启动时,目录下的所有脚本都被执行。如果你装了 SDKMAN!,为了手动运行脚本,执行下面的命令:

$ . ~/.sdkman/candidates/springboot/current/shell-completion/bash/spring
$ spring <HIT TAB HERE>
  grab  help  jar  run  test  version
[Note] Note

如果你使用 Homebrew 或 MacPorts 安装 Spring Boot CLI,命令行实现脚本会自动在 shell 中注册。

10.2.6 使用 Windows Scoop 安装

如果你是在 windows 平台上并使用 Scoop,你可以使用下面的命令安装 Spring Boot CLI:

> scoop bucket add extras
> scoop install springboot

Scoop 会在 ~/scoop/apps/springboot/current/bin 安装 spring。

[Note] Note

如果你没有看到对应的方法,可能是你安装的 scoop 过时了。请执行 scoop update 并重试一次。

10.2.7 快速启动 Spring CLI 示例

你可以使用下面的 web 应用程序来测试你的安装。首先,创建一个名叫 app.groovy 的文件,如下:

@RestController
class ThisWillActuallyRun {

	@RequestMapping("/")
	String home() {
		"Hello World!"
	}

}

然后从 shell 中运行它,如下:

$ spring run app.groovy
[Note] Note

第一次运行你的应用程序时会很慢,因为它需要一些时间去下载依赖。后续运行会非常快。

在你最喜欢的浏览器中打开 localhost:8080,你应该会看到下面的内容:

Hello World!

10.3 从旧版本升级 Spring Boot

如果你正在升级旧版本的 Spring Boot,请查看 项目 wiki 上的迁移指南,它提供了详细升级说明。也可在发行说明上查看每个版本的新的和值得注意的功能列表。

当升级到新特性发布版时,某些属性可能已被重命名或删除。Spring Boot 提供了一种分析应用程序环境和在启动时打印诊断信息的方法,但是也可以在运行时临时迁移属性。若要启用该特性,请将以下依赖项添加到项目中:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-properties-migrator</artifactId>
	<scope>runtime</scope>
</dependency>
[Warning] Warning

稍后将添加到环境中的属性,例如使用 @PropertySource 时,将不会被考虑。

[Note] Note

一旦完成迁移,请确保将该模块从项目的依赖项中删除。

若要升级现有的 CLI 安装,请使用适当的包管理命令(例如 brew upgrade),如果你是手动安装的 CLI,请遵循标准操作指南,更新你的 PATH 环境变量并移除旧版本的引用。