如果您正在开始使用Spring Boot或一般的“Spring”,请从阅读本节开始。它回答了基本的“什么?”、“如何?”和“为什么?”问题。它包括对Spring Boot的介绍,以及安装说明。然后,我们将带您构建您的第一个Spring Boot应用程序,并讨论一些核心原则。
1. Introducing Spring Boot
Spring Boot帮助您创建可以运行的独立的、生产级的基于Spring的应用程序。我们对Spring平台和第三方库持固执己见的观点,这样您就可以轻松入门了。大多数Spring Boot应用程序只需要很少的Spring配置。
您可以使用Spring Boot创建Java应用程序,这些应用程序可以通过使用Java-JAR
或更传统的WAR部署来启动。我们还提供了一个运行“Spring脚本”的命令行工具。
我们的主要目标是:
-
为所有的Spring开发提供极快且可广泛访问的入门体验。
-
要坚持自己的观点,但当需求开始偏离默认设置时,请迅速离开。
-
提供大类项目常见的一系列非功能性功能(如嵌入式服务器、安全性、指标、运行状况检查和外部化配置)。
-
绝对不需要代码生成,也不需要配置XML。
2. System Requirements
Spring Boot 3.0.0需要Java 17,并且与Java 19(包括Java 19)兼容。还需要Spring Framework6.0.2或更高版本。
为以下构建工具提供显式构建支持:
Build Tool | Version |
---|---|
Maven |
3.5+ |
抱篮 |
7.x(7.5或更高版本) |
2.1. Servlet Containers
Spring Boot支持以下嵌入式Servlet容器:
Name | Servlet Version |
---|---|
Tomcat 10.0 |
5.0 |
Jetty 11.0 |
5.1 |
Undertow 2.2(雅加达EE 9变种) |
5.0 |
您还可以将Spring Boot应用程序部署到任何兼容Servlet 5.0+的容器。
2.2. GraalVM Native Images
可以使用GraalVM22.3或更高版本将Spring Boot应用程序转换为本机映像。
可以使用GraalVM提供的原生构建工具Gradle/Maven插件或原生映像
工具创建镜像。您还可以使用本机映像Paketo构建包创建本机映像。
支持以下版本:
Name | Version |
---|---|
GraalVM社区 |
22.3 |
本机构建工具 |
0.9.18 |
3. Installing Spring Boot
Spring Boot可以与“经典的”Java开发工具一起使用,也可以作为命令行工具安装。无论哪种方式,您都需要Java SDK v17或更高版本。在开始之前,您应该使用以下命令检查当前的Java安装:
$ java -version
如果您是Java开发的新手,或者如果您想尝试使用Spring Boot,您可能希望首先尝试一下Spring Boot CLI(命令行界面)。否则,请继续阅读“经典”安装说明。
3.1. Installation Instructions for the Java Developer
您可以像使用任何标准Java库一样使用Spring Boot。为此,在您的类路径中包含适当的Spring-boot-*.jar
文件。Spring Boot不需要任何特殊的工具集成,因此您可以使用任何IDE或文本编辑器。此外,Spring Boot应用程序没有什么特别之处,因此您可以像运行和调试任何其他Java程序一样运行和调试Spring Boot应用程序。
尽管您可以复制Spring Boot Jars,但我们通常建议您使用支持依赖项管理的构建工具(如Maven或Gradle)。
3.1.1. Maven Installation
Spring Boot兼容ApacheMaven 3.3或更高版本。如果您还没有安装Maven,可以按照maven.apache.org上的说明进行操作。
On many operating systems, Maven can be installed with a package manager. If you use OSX Homebrew, try brew install maven . Ubuntu users can run sudo apt-get install maven . Windows users with Chocolatey can run choco install maven from an elevated (administrator) prompt. |
Spring Boot依赖项使用org.springFrawork.boot
groupID
。通常,您的Maven POM文件继承自Spring-ot-starter-parent
项目,并声明对一个或多个“starters”的依赖关系。Spring Boot还提供了一个可选的Maven插件来创建可执行JAR。
有关Spring Boot和Maven入门的更多详细信息,请参阅Maven插件参考指南的入门部分。
3.1.2. Gradle Installation
Spring Boot与Gradle 7.x(7.5或更高版本)兼容。如果您尚未安装Gradle,可以按照gradle.org上的说明进行操作。
Spring Boot依赖项可以通过使用org.springFrawork.Boot
组
声明。通常,您的项目声明对一个或多个“starters”的依赖项。Spring Boot提供了一个有用的Gradle插件,可用于简化依赖项声明和创建可执行JAR。
有关Spring Boot和Gradle入门的更多详细信息,请参阅Gradle插件参考指南的入门部分。
3.2. Installing the Spring Boot CLI
Spring Boot CLI(命令行界面)是一个命令行工具,您可以使用它来快速构建Spring的原型。它允许您运行Groovy脚本,这意味着您不必编写太多样板代码,就可以使用熟悉的类似Java的语法。
您不需要使用CLI来使用Spring Boot,但这是在没有IDE的情况下启动Spring应用程序的一种快速方法。
3.2.1. Manual Installation
您可以从Spring软件资源库下载Spring CLI发行版:
还可以使用最先进的快照分发。
下载后,请按照解压缩存档中的INSTALL.txt说明进行操作。总之,在.zip
文件的bin/
目录中有一个Spring
脚本(spring.bat
适用于Windows)。或者,您可以将Java-jar
与.jar
文件一起使用(该脚本帮助您确保正确设置了类路径)。
3.2.2. Installation with SDKMAN!
SDKMAN!(软件开发工具包管理器)可用于管理各种二进制SDK的多个版本,包括Groovy和Spring Boot CLI。抓住SDKMAN!使用以下命令从sdkman.io安装Spring Boot:
$ sdk install springboot
$ spring --version
Spring CLI v3.0.0
如果您为CLI开发功能并希望访问您构建的版本,请使用以下命令:
$ sdk install springboot dev /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-3.0.0-bin/spring-3.0.0/
$ sdk default springboot dev
$ spring --version
Spring CLI v3.0.0
上面的说明安装了一个名为dev
实例的Spring
本地实例。它指向您的目标构建位置,因此每次您重新构建Spring Boot时,Spring
都是最新的。
您可以通过运行以下命令查看它:
$ sdk ls springboot
================================================================================
Available Springboot Versions
================================================================================
> + dev
* 3.0.0
================================================================================
+ - local version
* - installed
> - currently in use
================================================================================
3.2.3. OSX Homebrew Installation
如果您在Mac上使用Homebrew,则可以使用以下命令安装Spring Boot CLI:
$ brew tap spring-io/tap
$ brew install spring-boot
HomeBrew将Spring
安装到/usr/local/bin
。
If you do not see the formula, your installation of brew might be out-of-date. In that case, run brew update and try again. |
3.2.4. MacPorts Installation
如果您在Mac上使用MacPorts,则可以使用以下命令安装Spring Boot CLI:
$ sudo port install spring-boot-cli
3.2.5. Command-line Completion
Spring Boot CLI包括为Bash和zsh外壳提供命令完成的脚本。您可以在任何外壳中源代码
脚本(也称为Spring
),或者将其放入您的个人或系统范围的bash完成初始化中。在Debian系统上,系统范围内的脚本位于/ellerComplete/bash
中,该目录中的所有脚本都会在新的外壳启动时执行。例如,如果已使用SDKMAN!安装,要手动运行脚本,请使用以下命令:
$ . ~/.sdkman/candidates/springboot/current/shell-completion/bash/spring
$ spring <HIT TAB HERE>
grab help jar run test version
If you install the Spring Boot CLI by using Homebrew or MacPorts, the command-line completion scripts are automatically registered with your shell. |
3.2.6. Windows Scoop Installation
如果您在Windows上并使用Scoop,则可以使用以下命令安装Spring Boot CLI:
> scoop bucket add extras > scoop install springboot
《独家新闻》将Spring
安装到~/scoop/apps/springboot/current/bin
.
If you do not see the app manifest, your installation of scoop might be out-of-date. In that case, run scoop update and try again. |
3.2.7. Quick-start Spring CLI Example
您可以使用以下Web应用程序来测试您的安装。首先,创建一个名为app.groovy
的文件,如下所示:
@RestController
class ThisWillActuallyRun {
@RequestMapping("/")
String home() {
"Hello World!"
}
}
然后从一个外壳运行它,如下所示:
$ spring run app.groovy
The first run of your application is slow, as dependencies are downloaded. Subsequent runs are much quicker. |
在您喜欢的Web浏览器中打开Localhost:8080
。您应该会看到以下输出:
Hello World!
4. Developing Your First Spring Boot Application
本节介绍如何开发一个小的“Hello World!”突出了Spring Boot的一些关键功能的Web应用程序。我们使用Maven来构建这个项目,因为大多数IDE都支持它。
spring.io网站包含许多使用Spring Boot的《入门指南》。如果您需要解决某个特定问题,请首先查看那里。 您可以通过转到start.spring.io并从依赖项搜索器中选择“Web”Starter来简化以下步骤。这样做会生成一个新的项目结构,以便您可以立即开始编码。有关更多详细信息,请查看start.spring.io用户指南。 |
在我们开始之前,打开一个终端并运行以下命令,以确保您安装了有效版本的Java和Maven:
$ java -version
openjdk version "17.0.4.1" 2022-08-12 LTS
OpenJDK Runtime Environment (build 17.0.4.1+1-LTS)
OpenJDK 64-Bit Server VM (build 17.0.4.1+1-LTS, mixed mode, sharing)
$ mvn -v
Apache Maven 3.8.5 (3599d3414f046de2324203b78ddcf9b5e4388aa0)
Maven home: usr/Users/developer/tools/maven/3.8.5
Java version: 17.0.4.1, vendor: BellSoft, runtime: /Users/developer/sdkman/candidates/java/17.0.4.1-librca
This sample needs to be created in its own directory. Subsequent instructions assume that you have created a suitable directory and that it is your current directory. |
4.1. Creating the POM
我们需要从创建一个Mavenpom.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>3.0.0</version>
</parent>
<!-- Additional lines to be added here... -->
</project>
前面的清单应该会为您提供一个有效的构建。您可以通过运行MVN Package
来测试它(目前,您可以忽略“JAR将为空-没有内容被标记为包含!”警告)。
At this point, you could import the project into an IDE (most modern Java IDEs include built-in support for Maven). For simplicity, we continue to use a plain text editor for this example. |
4.2. Adding Classpath Dependencies
Spring Boot提供了许多“启动器”,允许您将JAR添加到类路径中。我们的冒烟测试应用程序使用POM的父
部分中的Spring-boot-starter-parent
。SpringBoot-starter-parent
是一个特殊的启动器,它提供了有用的Maven缺省值。它还提供了一个
dependency-management
部分,以便您可以省略“幸福的”依赖项的
版本
标记。
其他“初学者”提供您在开发特定类型的应用程序时可能需要的依赖项。由于我们正在开发一个Web应用程序,因此我们添加了一个Spring-boot-starter-web
依赖项。在此之前,我们可以通过运行以下命令来查看当前拥有的内容:
$ mvn dependency:tree
[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT
MVN Dependency:tree
命令打印项目依赖项的树形表示形式。您可以看到,SpringBoot-starter-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. Writing the Code
要完成我们的应用程序,我们需要创建一个Java文件。默认情况下,Maven从src/main/Java
编译源代码,因此您需要创建该目录结构,然后添加名为src/main/Java/MyApplication.java
的文件以包含以下代码:
@RestController @SpringBootApplication public class MyApplication { @RequestMapping("/") String home() { return "Hello World!"; } public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
虽然这里没有太多代码,但有相当多的代码在运行。在接下来的几个部分中,我们将逐步介绍重要的部分。
4.3.1. The @RestController and @RequestMapping Annotations
MyApplication
类上的第一个批注是@RestController
。这称为构造型注释。它为阅读代码的人提供了提示,并为Spring提供了该类扮演特定角色的提示。在本例中,我们的类是一个Web@Controller
,因此Spring在处理传入的Web请求时会考虑它。
@Requestmap
注释提供“路由”信息。它告诉Spring任何具有/
路径的HTTP请求都应该映射到home
方法。@RestController
注释告诉Spring将结果字符串直接呈现回调用者。
The @RestController and @RequestMapping annotations are Spring MVC annotations (they are not specific to Spring Boot). See the MVC section in the Spring Reference Documentation for more details. |
4.3.2. The @SpringBootApplication Annotation
第二个类级注释是@SpringBootApplication
。这个批注称为元批注,它结合了@SpringBootConfiguration
、@EnableAutoConfiguration
和@ComponentScan
。
其中,我们在这里最感兴趣的批注是@EnableAutoConfiguration
。@EnableAutoConfiguration
告诉Spring Boot根据您添加的JAR依赖项“猜测”您希望如何配置Spring。由于Spring-ot-starter-web
添加了Tomcat和Spring MVC,因此自动配置假定您正在开发Web应用程序并相应地设置Spring。
4.4. Running the Example
此时,您的应用程序应该可以工作了。由于您使用了Spring-ot-starter-parent
POM,因此您有一个有用的run
目标,您可以使用它来启动应用程序。在根项目目录中输入MVN Spring-ot:run
以启动应用程序。您应该会看到类似于以下内容的输出:
$ mvn spring-boot:run
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.0.0)
....... . . .
....... . . . (log output here)
....... . . .
........ Started MyApplication in 2.222 seconds (process running for 6.514)
如果您打开Web浏览器进入localhost:8080
,您应该会看到以下输出:
Hello World!
要正常退出应用程序,请按ctrl-c
。
4.5. Creating an Executable Jar
我们通过创建一个可以在生产中运行的完全自包含的可执行JAR文件来结束我们的示例。可执行JAR(有时称为“胖JAR”)是包含已编译类以及代码运行所需的所有JAR依赖项的归档。
要创建可执行JAR,我们需要将Spring-ot-maven-plugin
添加到pom.xml
。为此,请在依赖项
部分的正下方插入以下行:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
The spring-boot-starter-parent POM includes <executions> configuration to bind the repackage goal. If you do not use the parent POM, you need to declare this configuration yourself. See the plugin documentation for details. |
保存pom.xml
并从命令行运行MVN包
,如下所示:
$ 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:3.0.0:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
如果查看目标
目录,您应该看到myproject-0.0.1-SNAPSHOT.jar
。该文件的大小应该在10MB左右。如果您想要窥探内部,可以使用jar TVF
,如下所示:
$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar
您还应该在目标
目录中看到一个名为myproject-0.0.1-SNAPSHOT.jar.original
的小得多的文件。这是Maven在被Spring Boot重新打包之前创建的原始JAR文件。
要运行该应用程序,请使用Java-jar
命令,如下所示:
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.0.0)
....... . . .
....... . . . (log output here)
....... . . .
........ Started MyApplication in 2.536 seconds (process running for 2.864)
如前所述,要退出应用程序,请按ctrl-c
。
5. What to Read Next
希望这一节提供了一些Spring Boot基础知识,并帮助您开始编写自己的应用程序。如果您是面向任务类型的开发人员,您可能希望跳到spring.io,并按照入门指南中的一些指南来解决特定的“如何使用Spring做到这一点?”有问题。我们还有特定于Spring Boot的“How-to”参考文档。
否则,下一个合乎逻辑的步骤是使用.html读取。如果您真的很不耐烦,您也可以跳过头来阅读Spring Boot特性。