如果您是"Spring Boot"或“Spring”新手,那么可通过本章来入门.
本章回答了基本的“what?”, “how?” and “why?”等问题,并包含Spring Boot介绍,安装说明等内容.
之后,我们将引导您构建第一个Spring Boot 应用程序,并讨论它的一些核心概念.
1. Spring Boot介绍
Spring Boot可轻松创建独立且生产级的Spring应用程序.
为方便您快速构建应用程序,我们对Spring平台和第三方库进行了有效整合.
大多数Spring Boot应用程序只需要较少的Spring配置就可直接运行。
你可以使用Spring Boot来创建Java应用程序(可通过java -jar或传统的war包来启动这些应用程序)。
此外,我们还提供一个可运行“spring scripts”的命令行工具.
我们的主要目标是:
- 为所有Spring开发提供更快且范围更广的入门经验.
- 开厢即用,在需求偏离默认值时也能快速摆脱困境.
- 提供一系列大型项目所需的非功能性需求(如,内嵌服务器,安全,指标,健康检查外部配置).
- 不用生成代码,也不需要XML配置。
2. 系统要求
Spring Boot 2.2.5.RELEASE依赖Java 8, 并可向上兼容到Java 13(包含).
此外,它还依赖Spring Framework 5.2.4.RELEASE或以上版本.
它支持如下构建工具:
![a1903ed5fe0afa1dcf686db9f819bd66.png](https://i-blog.csdnimg.cn/blog_migrate/a6b732402eac7114458b75bc2861cd14.jpeg)
2.1. Servlet 容器
Spring Boot支持如下内嵌servlet容器:
![a295cea97372d983ae055246a756d6e9.png](https://i-blog.csdnimg.cn/blog_migrate/9fe4c64d1a3de1628d530de1b50d3b38.jpeg)
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.
为此,请在你的类路径上包含相应的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来安装maven。
Ubuntu用户可运行sudo apt-get install maven命令来安装maven.
带有Chocolatey的windows用户可通过管理员命令窗口来安装maven(运行choco install maven命令).
Spring Boot 依赖可通过org.springframework.boot groupId来配置.
通常,你的Maven POM文件会继承spring-boot-starter-parent项目,并在其中声明一个或多个“Starters”.
Spring Boot还提供了一个可选的Maven plugin 来创建可执行jar.
下面是一个典型的pom.xml文件配置:<?xml version="1.0" encoding="UTF-8"?>
4.0.0
com.example
myproject
0.0.1-SNAPSHOT
org.springframework.boot
spring-boot-starter-parent
2.2.5.RELEASE
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-maven-plugin
提示
虽然spring-boot-starter-parent是使用Spring Boot的一种好方式,但这种方式未必适合所有场景.
例如,有时,你可能需要继承不同的父POM,或者可能不想用我们的默认设置.
在这种情况下,请参考using-spring-boot.html来了解使用导入范围的替代方案.
3.1.2. Gradle 安装
Spring Boot完全兼容5.x和6.x.虽然当前我们也支持4.10,但该支持会在后期版本中删除.
如果您还没有安装过Gradle,则可以参与gradle.org中的相关说明.
Spring Boot依赖可通过org.springframework.boot group来声明.
通常,你的项目可通过1个或多个“Starters”来引入依赖.
Spring Boot 提供了一个有用的Gradle plugin 来简化依赖声明和创建可执行jar.
Gradle Wrapper
在构建项目时,Gradle Wrapper提供了一种获取Gradle的好方法.
它是一个小的脚本和库,可随代码一起提交来引导构建过程。
参考docs.gradle.org/current/userguide/gradle_wrapper.html来了解详情.
有关Spring Boot和Gradle入门的更多详细信息,请参见Gradle插件参考指南的“Getting Started section ”部分。
3.2. 安装Spring Boot CLI
Spring Boot CLI (Command Line Interface)是一个命令行工具,通过该工具你可以快速构建项目原型. 它允许您运行Groovy脚本,这样你就可以使用熟悉的Java类似语法(无样板代码).
即便不用CLI也能使用Spring Boot,但它绝对是启动Spring应用程序的最快方法.
3.2.1. 手动安装
你可以从Spring软件仓库下载Spring CLI 发行包:
- spring-boot-cli-2.2.5.RELEASE-bin.zip
- spring-boot-cli-2.2.5.RELEASE-bin.tar.gz
此外,我们还提供了最新快照版本.
下载完成后,请按照解压包中的INSTALL.txt说明进行安装.
在.zip文件中存在一个bin/目录,该目录下含有spring脚本(对于Windows,其脚本为spring.bat).
此外,你也可以使用java -jar命令来运行.jar文件(该脚本可帮助你确认类路径是否设置正确).
3.2.2. 使用SDKMAN!进行安装
SDKMAN! (Software Development Kit Manager)可用于管理多个版本的二进制SDK,包括:Groovy 和Spring Boot CLI.
可通过sdkman.io来获取SDKMAN!,并使用如下命令来安装Spring Boot:
$ sdk install springboot $ spring --version Spring Boot v2.2.5.RELEASE
如果你想开发CLI功能以及能轻松地访问你的构建版本,则可使用如下命令:
$ sdk install springboot dev /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-2.2.5.RELEASE-bin/spring-2.2.5.RELEASE/ $ sdk default springboot dev $ spring --version Spring CLI v2.2.5.RELEASE
上面我们安装了一个spring本地实例-dev.
它指向您的目标构建位置,因此,每次重新构建Spring Boot时,spring都是最新的。
你可以通过如下命令来查看:
$ sdk ls springboot
================================================================================ Available Springboot Versions ================================================================================ > + dev * 2.2.5.RELEASE ================================================================================ + - local version * - installed > - currently in use ================================================================================
3.2.3. OSX Homebrew 安装
如果你的操作系统是Mac并用到了Homebrew,那么你可以使用如下命令来安装Spring Boot CLI:
$ brew tap pivotal/tap $ brew install springboot
Homebrew会将spring安装到/usr/local/bin.
提示
如果未看到spring,那说明brew安装可能已经过期了.
在这种情况下,你可以运行brew update命令,然后再重试.
3.2.4. MacPorts Installation
如果你的操作系统是Mac并用到了MacPorts,那么你可以使用如下命令来安装Spring Boot CLI:
$ sudo port install spring-boot-cli
3.2.5. 命令行补全
Spring Boot CLI 为BASH and zsh shell提供了命令补全功能.
可从任何的shell中获取脚本(也称为spring),也可将它放入个人或系统范围的bash补全初始化中.
在Debian系统上,系统级脚本位于/shell-completion/bash中,在启动新的Shell时它会执行该目录中的所有脚本。
例如,如果你是通过SDKMAN!来安装Spring Boot CLI的,则可以通过如下命令来手动运行脚本:
$ . ~/.sdkman/candidates/springboot/current/shell-completion/bash/spring $ spring 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.
提示
如果未看到spring,则说明scoop安装已经过期了。
在这种情况下,你可以运行scoop update,并再次重试.
3.2.7. Quick-start Spring CLI Example
你可以使用下面的web程序来测试你的安装。首先,创建一个名为app.groovy的文件,如下所示:
@RestController class ThisWillActuallyRun { @RequestMapping("/") String home() { "Hello World!" } }
然后,再通过shell来运行,如下所示:
$ spring run app.groovy
提示
第1次运行因为要下载依赖包,所以会很慢.后续运行就会很快了。
用你喜欢的浏览器打开localhost:8080.一切正常的话,你应该能看到如下输出:
Hello World!
3.3. 升级老版本Spring Boot
如果你是从Spring Boot 1.x版本升级的,可查看“migration guide” on the project wiki 来了解升级细节. 也可参考“release notes”来了解每个版本的新特性.
升级到新版本时,有些属性可能已改名或被删除. Spring Boot提供了一种在启动时分析应用程序环境并打印诊断的方法,还可以在运行时为您临时迁移属性。 要启用该功能,请将以下依赖添加到您的项目中:
org.springframework.boot spring-boot-properties-migrator runtime
提示
较晚加到环境的属性(如:@PropertySource)将不再考虑.
一旦完成了迁移,请记得将其从你的项目依赖中删除.
要升级现有CLI安装,可选用合适的包管理命令(例如:brew upgrade).
如果你是通过手动方式来安装CLI的,可参考标准说明, 记住:需更新PATH环境变量来删除所有旧引用.
4. 开发第一个Spring Boot Application
本节我们将开发一个简单的“ Hello World!”web应用程序。
我们将使用Maven来构建该项目(大多数IDE都支持Maven)。
提示
spring.io 网站包含许多使用Spring Boot的入门指南.
如果你想解决特定问题,可首先阅读该指南.
可进入start.spring.io网站并在依赖搜索器中选择"Web" starter来跳过下面的步骤.
该操作会生成一个全新的项目结构,方便您快速上手编码.
有关细节,可查看Spring Initializr documentation.
在开始之前,请先打开终端(命令行提示窗口),并执行如下命令来确保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是构建项目的配方.
打开你喜欢的文本编辑器,并增加如下内容:
4.0.0
com.example
myproject
0.0.1-SNAPSHOT
org.springframework.boot
spring-boot-starter-parent
2.2.5.RELEASE
上述清单为您展示了使用Spring Boot的基础构建.
你可以运行mvn package来进行测试(你可以忽略“jar will be empty - no content was marked for inclusion!”警告).
提示
现在,你可以将项目导入IDE (大多数现代Java IDE都内置了对Maven的相关支持).
为简单起见,在此示例中,我们继续使用纯文本编辑器。
4.2. 添加类路径依赖
Spring Boot提供了许多“Starters”来向类路径添加jar.
我们冒烟测试(smoke tests)应用程序在POM的parent部分中使用了spring-boot-starter-parent. spring-boot-starter-parent是一个可提供有用Maven默认值的特殊starter.
此外,为省略依赖中的version标签,它还提供了dependency-management部分。
其它“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本身并没有提供任何依赖.
要添加所需依赖,可编辑pom.xml并在parent部分的下方添加spring-boot-starter-web依赖:
org.springframework.boot
spring-boot-starter-web
再次运行mvn dependency:tree,你会看到额外新增了许多依赖项,如:Tomcat web server依赖 和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注解.
该注解可为阅读代码的人提供提示.
在这里,由于我们的类是一个web@Controller,因此Spring在处理传入web请求时会考虑该控制器.
而@RequestMapping注解将用来提供路由信息。
它告知Spring:任何带有/路径的HTTP请求都将交由home方法来处理。
而@RestController注解则告知Spring:直接将结果字符串返回给调用者.
提示
@RestController和@RequestMapping注解是Spring MVC注解(它们不是Spring Boot中的专用注解). 参考Spring参考文档中的MVC章节来了解详细信息.
4.3.2. @EnableAutoConfiguration注解
第二个类级注解是@EnableAutoConfiguration.
这个注解告诉Spring Boot:根据所添加的jar依赖来“猜测”Spring配置的方式。
由于spring-boot-starter-web添加了Tomcat和Spring MVC,因此自动配置(auto-configuration)会假设您正在开发Web应用程序并做相应的Spring设置。
Starters和Auto-configuration
自动配置旨在与“Starters”协同工作,但两者在概念上并没有直接联系.
你可以自由选择starters之外的jar依赖. Spring Boot仍会尽最大努力来自动配置您的应用程序.
4.3.3. “main”方法
我们应用程序的最后一部分是main方法。它只是一个遵循Java约定的标准应用程序入口方法.
我们的main方法会通过调用run来委派给Spring Boot的SpringApplication类.
SpringApplication会引导我们的应用程序启动Spring,后者反过来又会启动自动配置的Tomcat Web服务器。
我们需要将Example.class作为参数传递给run方法,以告诉SpringApplication哪个是主要的Spring组件。 args数组可通过命令行参数来传递。
4.4. 运行示例
此时,您的应用程序应该可以工作了。
由于您使用了spring-boot-starter-parent POM,因此您可通过run goal来来启动应用程序。
在根项目目录键入spring-boot:run来启动应用程序后,您应该能看到如下类似输出:
$ mvn spring-boot:run
:: Spring Boot :: (v2.2.5.RELEASE)
....... . . . ....... . . . (log output here)
....... . . . ........ Started Example in 2.222 seconds (JVM running for 6.514)
如果在浏览器中打开localhost:8080, 那么可以看到如下输出:
Hello World!
要优雅地退出应用程序,可按ctrl-c.
4.5. 创建可执行Jar
下面将创建一个可在生产环境中运行且完全自包含的可执行jar来结束我们的示例.
可执行jars(有时也称为“fat jars”)是包含你的编译类及其所有依赖的归档文件.
Executable jars和Java
Java并没有提供标准的方法来加载内嵌jar文件(即包含jar内的jar文件).
因此,当您分发自包含应用程序时可能会出现问题.
为解决这个问题,许多开发者都使用“uber” jars. uber jar会将所有依赖的类打包包单个归档文件.
这种方案的问题在于:很难查看应用程序中包含哪些库。
如果多个jar中含有相同文件名(但文件具有不同的内容),也可能会产生问题。
Spring Boot则采用了不同方案,该方案允许您直接嵌套jar.
要创建可执行jar,我们需要将spring-boot-maven-plugin添加到我们的pom.xml中。
为此,请在“ dependencies”部分下面插入以下行:
org.springframework.boot
spring-boot-maven-plugin
提示
spring-boot-starter-parent POM含有配置来绑定repackage goal.
若不使用parent POM,那么你必须自己声明该配置.参考plugin documentation来了解详情.
保存你的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.5.RELEASE:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
如果你查看target目录 ,你会看到myproject-0.0.1-SNAPSHOT.jar. 该文件大约有10 MB.
如果想窥视jar的内部,则可以用jar tvf,如下所示:
$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar
此外,在target目录下你还可以看到一个较小的文件:myproject-0.0.1-SNAPSHOT.jar.original.
这是Maven在Spring Boot重新打包之前创建的原始jar文件。
要运行该应用程序,请使用java -jar命令,如下所示:
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar
:: Spring Boot :: (v2.2.5.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)
像之前一样,要退出应用程序,可按ctrl+c.
5. 接下来读什么
希望本节提供的一些Spring Boot基础知识能帮助你编写自己的应用程序.
如果您是面向任务的开发人员,你可以跳到spring.io来查看如何使用Spring来解决相关问题的getting started指南. 此外,我们还提供了Spring Boot特有的“How-to”参考文档.
对于其它情况,则可以阅读using-spring-boot.html.
如果很着急,也可直接阅读Spring Boot features文档.
原文链接
https://docs.spring.io/spring-boot/docs/2.2.5.RELEASE/reference/html/getting-started.html#getting-started