如果您是刚开始使用 Spring Boot,或者对 Spring 有点印象,那么这部分内容是为您准备的!在这里我们将给出基本的 "是什么? "、"怎么做? "、"为什么? " 这类问题的答案. 这是一份友好的 Spring Boot 简介和安装说明. 当我们在讨论一些核心原理之后,我们将构建第一个 Spring Boot 应用.
1. Spring Boot 简介
使用 Spring Boot 可以很容易地创建出能直接运行的独立的、生产级别的 Spring 的应用. 我们对 Spring 平台和第三方类库都有自己的考虑,因此您可以从最基本的开始. 大多数 Spring Boot 应用只需要很少的 Spring 配置.
您可以使用 Spring Boot 来创建一个可以使用 java -jar
命令来运行或者基于传统的 war 包部署的应用程序. 我们还提供了一个用于运行 spring scripts 的命令行工具.
我们的主要目标是:
-
为所有 Spring Boot 开发提供一个更快、更全面的入门体验.
-
坚持自我虽好,但当需求出现偏离,您需要能迅速摆脱出来.
-
提供大量非功能性特性相关项目 (例如: 内嵌服务器、安全、指标、健康检查、外部配置).
-
绝对没有代码生成,也不要求 XML 配置.
2. 系统要求
Spring Boot 2.2.13.RELEASE 需要 Java 8 并且与Java 15 (包括) 兼容. 还需要 Spring Framework 5.2.12.RELEASE 或更高版本.
为以下构建工具提供了明确的构建支持:
Build Tool | Version |
---|---|
Maven |
3.3+ |
Gradle |
5.x and 6.x (支持4.10,但已弃用) |
3. 安装 Spring Boot
Spring Boot 可以与经典的 Java 开发工具一起使用或者作为命令行工具安装. 无论如何,您都需要 Java SDK v1.8 或者更高版本. 在开始之前您应该检查 Java 的安装情况:
$ java -version
如果您是 Java 开发新手,或者您只想尝试使用 Spring Boot,您可能需要首先尝试使用 Spring Boot CLI,否则请阅读经典的安装说明.
3.1. 针对 Java 开发人员的安装说明
您可以跟使用任何标准 Java 库的方式一样使用 Spring Boot. 只需要在 classpath 下包含相应的 spring-boot-*.jar
文件即可. Spring Boot 不需要任何专用的工具来集成,因此您可以使用任何 IDE 或者文本编辑器,并且 Spring Boot 应用也没什么特殊之处,因此可以像任何其它 Java 程序一样运行和调试.
虽然您可以复制 Spring Boot 的 jar 文件,但我们通常建议您使用支持依赖管理的构建工具 (比如 Maven 或者 Gradle) .
3.1.1. 使用 Maven 安装
Spring Boot 兼容 Apache Maven 3.3 或更高版本. 如果您还没有安装 Maven,可以到 maven.apache.org 上按照说明进行操作.
在许多操作系统上,可以通过软件包管理器来安装 Maven. 如果您是 OSX Homebrew 用户,请尝试使用 brew install maven . Ubuntu 用户可以运行 sudo apt-get install maven .
具有 Chocolatey 的Windows用户可以使用管理员权限 (管理员) 下运行 choco install maven .
|
Spring Boot 依赖使用到了 org.springframework.boot
groupId
. 通常,您的 Maven POM 文件将从 spring-boot-starter-parent
项目继承,并声明一个或多个 “Starters” 依赖. 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 https://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.2.13.RELEASE</version>
</parent>
<!-- Override inherited settings -->
<description/>
<developers>
<developer/>
</developers>
<licenses>
<license/>
</licenses>
<scm>
<url/>
</scm>
<url/>
<!-- 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>
</project>
spring-boot-starter-parent 是一个使用 Spring Boot 的好方式,但它并不是任何时候都适用. 有时您可能需要继承不同的父 POM,或者您不喜欢我们的默认配置. 请参见 使用不带父 POM 的 Spring Boot 作为的替代方案,其使用了 import Scope.
|
3.1.2. 使用 Gradle 安装
Spring Boot与 Gradle 5.x和6.x兼容. 还支持4.10,但已弃用,在将来的版本中将删除该支持. 如果您还没有安装 Gradle,您可以按照 gradle.org 上的说明进行操作.
Spring Boot 依赖 org.springframework.boot
group
. 通常,您的项目将声明一个或者多个 “Starters” 的依赖. Spring Boot 提供了一个有用的 Gradle 插件,可用于简化依赖声明和创建可执行 jar 文件.
有关Spring Boot和Gradle入门的更多详细信息,请参见Gradle插件参考指南的 入门 部分.
3.2. 安装 Spring Boot CLI
Spring Boot CLI 是一个命令行工具,如果您想使用 Spring 快速搭建原型,可以选择它. 它允许您运行 Groovy 脚本,这意味着您有可以有类 Java 语法且没有太多样板的代码.
您不需要使用 CLI 来配合 Spring Boot,但它确实是一个入门 Spring 应用的最快方式.
3.2.1. 手动安装
您可以从 Spring 软件仓库中下载 Spring CLI 发行版:
最新的快照发行版也是可用的.
下载之后,请按照解压后文件中的 INSTALL.txt 说明进行操作. 总之: 在 .zip
文件的 bin/ 目录中有一个 spring
脚本 (在 Windows 下为 spring.bat
) ,或者也可以使用 java -jar
配合 .jar
文件 (该脚本可以帮助您确保 classpath 设置正确) .
3.2.2. 使用 SDKMAN! 安装
SDKMAN! (软件开发包管理器) 用于管理二进制 SDK 的多个版本,包括 Groovy 和 Spring Boot CLI. 从 sdkman.io 获取 SDKMAN! 并安装 Spring Boot:
$ sdk install springboot $ spring --version Spring Boot v2.2.13.RELEASE
如果您正在为 CLI 开发功能,并希望够能轻松地访问刚创建的版本,请参照以下指令.
$ sdk install springboot dev /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-2.2.13.RELEASE-bin/spring-2.2.13.RELEASE/ $ sdk default springboot dev $ spring --version Spring CLI v2.2.13.RELEASE
以上操作将会安装一个名为 dev
的 spring
的本地实例. 它指向您的目标构建位置,因此每次重新构建 Spring Boot 时,spring
都是最新的.
您可以这样做来相关信息:
$ sdk ls springboot ================================================================================ Available Springboot Versions ================================================================================ > + dev * 2.2.13.RELEASE ================================================================================ + - local version * - installed > - currently in use ================================================================================
3.2.3. 使用 OSX Homebrew 安装
如果您是在 Mac 上工作并且使用了 Homebrew,您安装 Spring Boot CLI 需要做的:
$ brew tap spring-io/tap $ brew install spring-boot
Homebrew 将会把 spring
安装在 /usr/local/bin
.
如果您没有看到执行流程, 您安装的 brew 可能已经过期了. 执行 brew update 并重新尝试.
|
3.2.4. 使用 MacPorts 安装
如果您是在 Mac 上工作并且使用了 MacPorts,您安装 Spring Boot CLI 所需要做的:
$ sudo port install spring-boot-cli
3.2.5. 命令行完成
Spring Boot CLI 为 BASH 和 zsh 提供了命令完成脚本. 您可以在任何 shell 中执行此脚本 (也称为 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
如果您使用 Homebrew 或者 MacPorts 安装了 Spring Boot CLI,则命令行完成脚本将自动注册到您的 shell 中. |
3.2.6. Windows Scoop安装
如果您在Windows上并使用 Scoop,则可以使用以下命令安装Spring Boot CLI:
> scoop bucket add extras > scoop install springboot
Scoop 将 Spring
安装在 ~/scoop/apps/springboot/current/bin
.
如果您没有看到应用清单,则可能是因为瓢的安装已过期. 在这种情况下,请运行 scoop update 更新,然后重试.
|
3.2.7. 快速入门 Spring CLI 示例
这是一个非常简单的 web 应用程序,可以用于测试您的安装情况. 创建一个名为 app.groovy
的文件:
@RestController
class ThisWillActuallyRun {
@RequestMapping("/")
String home() {
"Hello World!"
}
}
之后在 shell 中运行它:
$ spring run app.groovy
第一次运行应用的时候需要一些时间,因为需要下载依赖. 后续运行将会更快. |
在您喜欢的浏览器中打开 localhost:8080
,您应该会看到以下输出:
Hello World!
3.3. 升级旧版 Spring Boot
如果您想从 1.x
release 升级Spring Boot ,升级到此版本,请查看项目 “迁移指南” . 该指南提供了详细的升级说明. 还请检查 "发行说明" 以获取每个发行版的 "新功能和值得注意的功能" 列表.
升级到新功能版本时,某些属性可能已被重命名或删除. Spring Boot提供了一种在启动时分析应用程序环境并打印诊断的方法,还可以在运行时为您临时迁移属性. 要启用该功能,请将以下依赖添加到您的项目中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>
<scope>runtime</scope>
</dependency>
因为 Properties 在环境中添加的比较晚, (例如使用 @PropertySource 时) 将不被考虑.
|
迁移完成后,请确保从项目的依赖中删除此模块. |
要升级现有的 CLI,请使用相应的包管理器命令 (例如 brew upgrade
) 或者, 如果您手动安装了 CLI,请按照标准说明,记得更新您的 PATH 环境变量以删除任何旧的引用.
4. 开发第一个 Spring Boot 应用
让我们使用 Java 开发一个简单的 Hello World! web 应用程序,以便体现 Spring Boot 的一些关键特性. 我们将使用 Maven 构建该项目,因为大多数 IDE 都支持它.
您可以到 start.spring.io 使用依赖搜索功能选择 web starter 来快速完成以下步骤. 它将自动生成一个新的项目结构,以便您可以立即开始编码. 查看 Spring Initializr 文档 了解更多信息. |
在开始之前,打开终端检查您是否安装了符合要求的 Java 版本和 Maven 版本.
$ java -version java version "1.8.0_102" Java(TM) SE Runtime Environment (build 1.8.0_102-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
$ mvn -v Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T14:33:14-04:00) Maven home: /usr/local/Cellar/maven/3.3.9/libexec Java version: 1.8.0_102, vendor: Oracle Corporation
此示例需要在您自己的文件夹中创建,后续的步骤说明假设您已经创建了这个文件夹,它是您的当前目录. |
4.1. 创建 POM
我们先要创建一个 Maven pom.xml
文件. 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 https://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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.13.RELEASE</version>
</parent>
<description/>
<developers>
<developer/>
</developers>
<licenses>
<license/>
</licenses>
<scm>
<url/>
</scm>
<url/>
<!-- Additional lines to be added here... -->
</project>
这应该会给您生成一个工作版本,您可以通过运行 mvn package
来测试它 (此时您可以忽略 “jar will be empty - no content was marked for inclusion!” 警告信息).
此时,您可以将项目导入 IDE (大部分的现代 Java IDE 都内置 Maven 支持) . 为了简单起见,我们将继续在这个例子中使用纯文本编辑器. |
4.2. 添加 Classpath 依赖
Spring Boot 提供了多个 “Starters” ,可以让您方便地将 jar 添加到 classpath 下. 我们的示例应用已经在 POM 的 parent
部分使用了 spring-boot-starter-parent
. spring-boot-starter-parent
是一个特殊 Starter
,
它提供了有用的 Maven 默认配置. 此外它还提供了依赖管理
功能,您可以忽略这些依赖的版本 (version) 标签.
其他 “Starters” 只提供在开发特定应用时可能需要到的依赖. 由于我们正在开发一个 web 应用,因此我们将添加一个 spring-boot-starter-web
依赖 , 但在此之前,让我们来看看目前拥有的.
$ mvn dependency:tree [INFO] com.example:myproject:jar:0.0.1-SNAPSHOT
mvn dependency:tree
命令以树的形式打印项目的依赖. 您可以看到 spring-boot-starter-parent
本身不提供依赖. 我们可以在 parent
下方立即编辑 pom.xml
并添加 spring-boot-starter-web
依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
如果您再次运行 mvn dependency:tree
,将会看到现在有许多附加的依赖,包括了 Tomcat web 服务器和 Spring Boot 本身.
4.3. 编码
要完成我们的应用,我们需要创建一个 Java 文件. 默认情况下,Maven 将从 src/main/java
目录下编译源代码,因此您需要创建该文件夹结构,之后添加一个名为 src/main/java/Example.java
的文件:
import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;
@RestController
@EnableAutoConfiguration
public class Example {
@RequestMapping("/")
String home() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(Example.class, args);
}
}
虽然没有多少代码,但它仍然做了很多事情. 让我们看看里面重要的部分.
4.3.1. @RestController 与 @RequestMapping 注解
Example 类中的第一个注解是 @RestController
,该注解被称作 stereotype 注解. 它能为代码阅读者提供一些提示,对于 Spring 而言,这个类具有特殊作用. 在本示例中,我们的类是一个 web @Controller
,因此 Spring 在处理传入的 web 请求时会考虑它.
@RequestMapping
注解提供了 routing (路由) 信息. 它告诉 Spring,任何具有路径为 /
的 HTTP 请求都应映射到 home
方法. @RestController
注解告知 Spring 渲染结果字符串直接返回给调用者.
@RestController 和 @RequestMapping 是 Spring MVC 注解 (它们不是 Spring Boot 特有的) . 有关更多详细信息,请参阅 Spring 参考文档中的 MVC 章节
|
4.4. 运行示例
此时,我们的应用应该是可以工作了. 由于您使用了 spring-boot-starter-parent
POM,因此您可以使用 run
来启动应用程序. 在根目录下输入 mvn spring-boot:run
以启动应用:
$ mvn spring-boot:run . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.2.13.RELEASE) ....... . . . ....... . . . (log output here) ....... . . . ........ Started Example in 2.222 seconds (JVM running for 6.514)
如果您用浏览器打开了 localhost:8080
,您应该会看到以下输出:
Hello World!
要退出程序,请按 ctrl+c
.
4.5. 创建可执行 jar
我们通过创建一个完全自包含 (self-contained) 的可执行 jar 文件完成了示例. 该 jar 文件可以在生产环境中运行. 可执行 jar (有时又称为 fat jars
) 是包含了编译后的类以及代码运行时所需要相关的 jar 依赖的归档文件.
要创建可执行 jar,我们需要将 spring-boot-maven-plugin
添加到 pom.xml
文件中. 在 dependencies
下方插入以下配置:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
spring-boot-starter-parent POM 包含了 <executions> 配置,用于绑定 repackage . 如果您没有使用父 POM,您需要自己声明此配置. 有关详细的信息,请参阅 插件文档.
|
保存 pom.xml
并在命令行中运行 mvn package
:
$ mvn package [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building myproject 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] .... .. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject --- [INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar [INFO] [INFO] --- spring-boot-maven-plugin:2.2.13.RELEASE:repackage (default) @ myproject --- [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------
如果您浏览 target
目录,您应该会看到 myproject-0.0.1-SNAPSHOT.jar
. 该文件的大小大约为 10 MB. 如果您想要查看里面的内容,可以使用 jar tvf
:
$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar
您应该还会在 target 目录中看到一个名为 myproject-0.0.1-SNAPSHOT.jar.original
的较小文件. 这是在 Spring Boot 重新打包之前由 Maven 所创建的原始 jar 文件.
使用 java -jar
命令运行该应用:
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.2.13.RELEASE) ....... . . . ....... . . . (log output here) ....... . . . ........ Started Example in 2.536 seconds (JVM running for 2.864)
跟之前一样, 要退出应用,请按 ctrl-c
.
5. 下一步
希望您在本章节学到了一些 Spring Boot 的基础知识,并且开始编写自己的应用. 如果您是一名面向任务 (task-oriented) 的开发人员,您可能想跳到 spring.io 并查看一些 入门指南. 这些指南可以解决特定的 "我该如何使用Spring?" 问题. 此外我们还有 Spring Boot 专门的 “How-to” 参考文档.
接下来阅读的是第三部: 使用 Spring Boot. 如果您真的感到不耐烦了,可以跳过该部分直接阅读 Spring Boot 特性.