如果您是从Spring Boot或“ Spring”开始的,请先阅读本节。它回答了基本的“什么?”,“如何?” 和“为什么?” 问题。它包括对Spring Boot的介绍以及安装说明。然后,我们将引导您构建第一个Spring Boot应用程序,并讨论一些核心原理。
1.介绍Spring Boot
Spring Boot帮助您创建可运行的独立的,基于生产级的基于Spring的应用程序。我们对Spring平台和第三方库持固执己见的观点,这样您就可以以最小的麻烦开始使用。大多数Spring Boot应用程序只需要很少的Spring配置。
您可以使用Spring Boot创建Java应用程序,可以通过使用java -jar
或更传统的战争部署来启动Java应用程序。我们还提供了一个运行“ spring脚本”的命令行工具。
我们的主要目标是:
- 为所有Spring开发提供根本上更快且可广泛访问的入门体验。
- 开箱即用,但由于需求开始与默认值有所出入,因此很快就会摆脱困境。
- 提供一系列大型项目通用的非功能性功能(例如嵌入式服务器,安全性,指标,运行状况检查和外部化配置)。
- 完全没有代码生成,也不需要XML配置。
2.系统要求
Spring Boot 2.4.3需要Java 8,并且与Java 15(包括)兼容。 还需要Spring Framework 5.3.4或更高版本。
为以下构建工具提供了明确的构建支持:
制作工具 | 版本 |
---|---|
马文 | 3.3+ |
摇篮 | 6(6.3或更高版本)。还支持5.6.x,但已弃用 |
2.1 Servlet容器
Spring Boot支持以下嵌入式servlet容器:
姓名 | Servlet版本 |
---|---|
Tomcat 9.0 | 4.0 |
码头9.4 | 3.1 |
Undertow 2.0 | 4.0 |
您还可以将Spring Boot应用程序部署到任何Servlet 3.1+兼容的容器中。
3.安装Spring Boot
Spring Boot可以与“经典” Java开发工具一起使用,也可以作为命令行工具安装。无论哪种方式,都需要Java SDK v1.8或更高版本。在开始之前,您应该使用以下命令检查当前的Java安装:
$ java-版本
如果您不熟悉Java开发,或者想尝试使用Spring Boot,则可能要先尝试使用Spring Boot CLI(命令行界面)。否则,请继续阅读“经典”安装说明。
3.1 Java开发人员的安装说明
您可以像使用任何标准Java库一样使用Spring Boot。为此,请spring-boot-*.jar
在类路径中包含适当的文件。Spring Boot不需要任何特殊的工具集成,因此您可以使用任何IDE或文本编辑器。另外,Spring Boot应用程序没有什么特别之处,因此您可以像运行其他Java程序一样运行和调试Spring Boot应用程序。
尽管您可以复制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
项目继承,并声明对一个或多个“启动器”的依赖关系。Spring Boot还提供了一个可选的Maven插件来创建可执行jar。
有关使用Spring Boot和Maven入门的更多详细信息,请参见Maven插件参考指南的“入门”部分。
3.1.2 摇篮安装
Spring Boot与Gradle 6(6.3或更高版本)兼容。还支持Gradle 5.6.x,但不建议使用该支持,在将来的版本中将删除该支持。如果尚未安装Gradle,则可以按照gradle.org上的说明进行操作。
可以使用来声明Spring Boot依赖项org.springframework.boot
group
。通常,您的项目会声明对一个或多个“启动器”的依赖。Spring Boot提供了一个有用的Gradle插件,可用于简化依赖项声明和创建可执行jar。
摇篮包装
当您需要构建项目时,Gradle包装器提供了一种“获取” Gradle的好方法。它是一个小的脚本和库,您随代码一起提交以引导构建过程。有关详细信息,请参见docs.gradle.org/current/userguide/gradle_wrapper.html。
有关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说明进行操作。总而言之,文件目录中有一个spring
脚本(spring.bat
对于Windows)。或者,您可以使用该文件(脚本可帮助您确保正确设置类路径)。bin/``.zip``java -jar``.jar
3.2.2 使用SDKMAN安装!
SDKMAN!(软件开发工具包管理器)可用于管理各种二进制SDK的多个版本,包括Groovy和Spring Boot CLI。获取SDKMAN!从sdkman.io并使用以下命令安装Spring Boot:
$ sdk安装springboot
$ spring —version
Spring Boot v2.4.3
如果您为CLI开发功能并希望访问所构建的版本,请使用以下命令:
$ sdk安装springboot dev /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-2.4.3-bin/spring-2.4.3/
$ sdk默认的springboot dev
$ spring —version
Spring CLI v2.4.3
前面的说明安装spring
称为dev
实例的本地实例。它指向您的目标构建位置,因此每次重新构建Spring Bootspring
都是最新的。
您可以通过运行以下命令来查看它:
$ sdk ls springboot
================================================== =============================
可用的Springboot版本
================================================== =============================
> +开发
* 2.4.3
================================================== =============================
+-本地版本
*-已安装
>-当前正在使用
================================================== =============================
3.2.3 OSX Homebrew安装
如果您在Mac上并且使用Homebrew,则可以使用以下命令来安装Spring Boot CLI:
$ brew tap spring-io / tap
$ brew install spring-boot
自制软件安装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提供命令完成。您可以source
将脚本(也称为spring
)放在任何shell中,或将其放在个人或系统范围内的bash完成初始化中。在Debian系统上,系统范围内的脚本位于其中,/shell-completion/bash
并且在启动新Shell时将执行该目录中的所有脚本。例如,如果您是使用SDKMAN!安装的,则要手动运行脚本,请使用以下命令:
$。〜/ .sdkman / candidates / springboot / current / shell-completion / bash / spring
$ spring <这里点击标签>
抢救jar运行测试版
如果使用Homebrew或MacPorts安装Spring Boot CLI,则命令行完成脚本会自动注册到您的Shell中。 | |
---|---|
3.2.6 Windows Scoop安装
如果您使用的是Windows并使用Scoop,则可以使用以下命令安装Spring Boot CLI:
>铲斗添加附加功能
>独家安装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!"
}
}
然后从外壳运行它,如下所示:
$ spring run app.groovy
由于依赖项已下载,因此您的应用程序的第一次运行很慢。随后的运行要快得多。 | |
---|---|
[localhost:8080](http://localhost:8080/)
在您喜欢的网络浏览器中打开。您应该看到以下输出:
你好,世界!
3.3 从较早版本的Spring Boot升级
如果要从1.x
Spring Boot发行版进行升级,请查看项目Wiki上的“迁移指南”,其中提供了详细的升级说明。还请检查“发行说明”以获取每个发行版的“新功能和值得注意的功能”列表。
升级到新功能版本时,某些属性可能已被重命名或删除。Spring Boot提供了一种在启动时分析应用程序环境并打印诊断的方法,而且还为您在运行时临时迁移属性。要启用该功能,请将以下依赖项添加到您的项目中:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>
<scope>runtime</scope>
</dependency>
较晚添加到环境的属性(例如使用时@PropertySource )将不被考虑。 |
|
---|---|
迁移完成后,请确保从项目的依赖项中删除此模块。 | |
---|---|
要升级现有的CLI安装,请使用适当的程序包管理器命令(例如,brew upgrade
)。如果您手动安装了CLI,请遵循标准说明,记住要更新您的PATH
环境变量以删除所有较旧的引用。
4.开发您的第一个Spring Boot应用程序
本节介绍如何开发小型“ Hello World!”。Web应用程序,重点介绍了Spring Boot的一些关键功能。我们使用Maven来构建此项目,因为大多数IDE都支持它。
该spring.io网站包含了许多“入门”指南使用Spring的引导。如果您需要解决特定问题,请首先检查。 通过转到start.spring.io并从依赖项搜索器中选择“ Web”启动器,可以简化以下步骤。这样做会生成一个新的项目结构,以便您可以立即开始编码。查看Spring Initializr文档以获取更多详细信息。 |
|
---|---|
在开始之前,请打开终端并运行以下命令,以确保安装了有效的Java和Maven版本:
$ java-版本
Java版本“ 1.8.0_102”
Java(TM)SE运行时环境(内部版本1.8.0_102-b14)
Java HotSpot(TM)64位服务器VM(内部版本25.102-b14,混合模式)
$ mvn -v
Apache Maven 3.5.4(1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-17T14:33:14-04:00)
Maven主页:/usr/local/Cellar/maven/3.3.9/libexec
Java版本:1.8.0_102,供应商:Oracle Corporation
此样本需要在其自己的目录中创建。随后的说明假定您已经创建了一个合适的目录,并且它是当前目录。 | |
---|---|
4.1 创建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>2.4.3</version>
</parent>
<description/>
<developers>
<developer/>
</developers>
<licenses>
<license/>
</licenses>
<scm>
<url/>
</scm>
<url/>
<!-- Additional lines to be added here... -->
</project>
上面的清单应为您提供有效的构建。您可以通过运行mvn package
进行测试(目前,您可以忽略“ jar将为空-没有内容标记为包含!”警告)。
此时,您可以将项目导入IDE(大多数现代Java IDE都包含对Maven的内置支持)。为简单起见,我们在此示例中继续使用纯文本编辑器。 | |
---|---|
4.2 添加类路径依赖
Spring Boot提供了许多“启动器”,使您可以将jar添加到类路径中。我们的烟雾测试应用程序使用spring-boot-starter-parent
的parent
聚甲醛的部分。本spring-boot-starter-parent
是一个特殊的启动提供有用的Maven的默认值。它还提供了一个dependency-management
部分,以便您可以省略version
“祝福”依赖项的标签。
其他“入门”提供了开发特定类型的应用程序时可能需要的依赖项。由于我们正在开发Web应用程序,因此我们添加了spring-boot-starter-web
依赖性。在此之前,我们可以通过运行以下命令来查看当前的状态:
$ mvn依赖项:树
[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT
该mvn dependency:tree
命令显示项目依赖关系的树形表示。您可以看到它spring-boot-starter-parent
本身不提供任何依赖关系。要添加必要的依赖关系,请编辑您的依赖关系,pom.xml
并spring-boot-starter-web
在该parent
部分的下面添加依赖关系:
<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
。这被称为构造型注释。它为阅读代码的人和Spring提供了提示,提示该类起特定作用。在这种情况下,我们的类是一个web @Controller
,因此Spring在处理传入的Web请求时会考虑使用它。
该@RequestMapping
注释提供“路由”的信息。它告诉Spring任何具有/
路径的HTTP请求都应映射到该home
方法。该@RestController
注解告诉Spring使得到的字符串直接返回给调用者。
在@RestController 与@RequestMapping 注解是Spring MVC的注解(他们并不是专门针对春季启动)。有关更多详细信息,请参见Spring参考文档中的MVC部分。 |
|
---|---|
4.3.2 @EnableAutoConfiguration批注
第二级注释是@EnableAutoConfiguration
。这个注释告诉Spring Boot根据添加的jar依赖关系“猜测”您如何配置Spring。由于spring-boot-starter-web
添加了Tomcat和Spring MVC,因此自动配置假定您正在开发Web应用程序并相应地设置Spring。
启动器和自动配置
自动配置旨在与“启动器”配合使用,但是这两个概念并没有直接联系在一起。您可以在启动程序之外自由选择jar依赖项。Spring Boot仍然尽其最大努力来自动配置您的应用程序。
4.3.3 “主要”方法
我们应用程序的最后一部分是main
方法。这是遵循Java约定的应用程序入口点的标准方法。我们的main方法SpringApplication
通过调用委托给Spring Boot的类run
。 SpringApplication
引导我们的应用程序,启动Spring,这反过来又启动了自动配置的Tomcat Web服务器。我们需要将Example.class
一个参数传递给run
方法,以判断SpringApplication
哪个是主要的Spring组件。该args
数组也将通过以公开任何命令行参数。
4.4 运行示例
此时,您的应用程序应该可以工作了。由于使用了spring-boot-starter-parent
POM,因此有一个有用的run
目标,可以用来启动应用程序。mvn spring-boot:run
从根项目目录中键入以启动应用程序。您应该看到类似于以下内容的输出:
$ mvn spring-boot:运行
。_
/ \ / __‘ __ () \ \ \ \
(()\ __ |’ |’ | |’ \ / | \ \ \ \ \<br /> \\ / ___)| | _)| | | | | || (_ | |))))<br /> '| ____ | .__ | _ | | _ | _ | | _ \ __,| / / / /<br /> ======== | _ | ============= | ___ / = / _ / _ / _ /<br /> :: Spring Boot ::(v2.4.3)<br />....... 。。<br />....... 。。(日志输出在这里)<br />....... 。。<br />........在2.222秒内启动示例(JVM运行6.514)<br />如果您打开Web浏览器到
localhost:8080,则应该看到以下输出:<br />你好,世界!<br />要正常退出该应用程序,请按
ctrl-c`。
4.5 创建一个可执行的Jar
通过创建一个可以在生产环境中运行的完全独立的可执行jar文件来结束示例。可执行jar(有时称为“胖jar”)是包含您的已编译类以及代码需要运行的所有jar依赖项的归档文件。
可执行jar和Java
Java没有提供加载嵌套jar文件(jar中本身包含的jar文件)的标准方法。如果您要分发独立的应用程序,则可能会出现问题。
为了解决这个问题,许多开发人员使用“超级”罐子。uber jar将来自应用程序所有依赖项的所有类打包到单个存档中。这种方法的问题在于,很难查看应用程序中包含哪些库。如果在多个jar中使用了相同的文件名(但内容不同),也可能会产生问题。
Spring Boot采用了另一种方法,实际上允许您直接嵌套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软件包
[INFO]正在扫描项目…
[信息]
[INFO] ———————————————————————- ————————————-
[INFO]构建myproject 0.0.1-SNAPSHOT
[INFO] ———————————————————————- ————————————-
[INFO] ……
[INFO] —- maven-jar-plugin:2.4:jar(默认-jar)@ myproject-
[INFO]构建jar:/Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar
[信息]
[INFO] —- spring-boot-maven-plugin:2.4.3:repackage(默认)@ myproject-
[INFO] ———————————————————————- ————————————-
[INFO]建立成功
[INFO] ———————————————————————- ————————————-
如果查看target
目录,则应该看到myproject-0.0.1-SNAPSHOT.jar
。该文件的大小应为10 MB左右。如果您想窥视内部,可以使用jar tvf
,如下所示:
$ jar tvf target / myproject-0.0.1-SNAPSHOT.jar
您还应该myproject-0.0.1-SNAPSHOT.jar.original
在target
目录中看到一个更小的文件。这是Maven在Spring Boot重新打包之前创建的原始jar文件。
要运行该应用程序,请使用以下java -jar
命令:
$ java -jar target / myproject-0.0.1-SNAPSHOT.jar
。_
/ \ / __‘ __ () \ \ \ \
(()\ __ |’ |’ | |’ \ / | \ \ \ \ \<br /> \\ / ___)| | _)| | | | | || (_ | |))))<br /> '| ____ | .__ | _ | | _ | _ | | _ \ __,| / / / /<br /> ======== | _ | ============= | ___ / = / _ / _ / _ /<br /> :: Spring Boot ::(v2.4.3)<br />....... 。。<br />....... 。。(日志输出在这里)<br />....... 。。<br />........在2.536秒内启动示例(JVM运行2.864)<br />和以前一样,要退出该应用程序,请按
ctrl-c`。
5.接下来阅读什么
希望本节提供了一些Spring Boot基础知识,并带您开始编写自己的应用程序。如果您是面向任务的开发人员,则可能要跳到spring.io并查看一些解决特定“我如何使用Spring进行操作”的入门指南。问题。我们也有特定于Spring Boot的“操作方法”参考文档。
否则,下一个逻辑步骤是阅读using-spring-boot.html。如果您真的不耐烦,还可以继续阅读有关Spring Boot功能的信息。