spring boot 入门_Spring Boot 2.2.5 尝鲜-入门指南

如果您是"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

2.1. Servlet 容器

Spring Boot支持如下内嵌servlet容器:

a295cea97372d983ae055246a756d6e9.png

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值