II. 入门
如果你刚刚开始使用Spring Boot,或者是“Spring”,这是你的一部分!在这里我们回答基本的“什么?”,“怎么样”和“为什么?”的问题。你会发现一个详细的介绍Spring Boot和安装说明。然后,我们将构建我们的第一个Spring Boot应用程序,然后我们再讨论一些核心原则。
8. 介绍Spring Boot
Spring Boot可以轻松创建可以“运行”的独立的,生产级的基于Spring的应用程序。我们对Spring平台和第三方库有自己的看法,所以开始你不要觉得奇怪。大多数Spring Boot应用程序需要很少的Spring配置。
您可以使用Spring Boot创建可以使用java -jar 或传统的war部署的Java应用程序。我们还提供一个运行“spring脚本”的命令行工具。
我们的主要目标是:
为所有的Spring开发人员提供一个更快,更广泛的入门体验。
开始使用开箱即用的配置(采用默认配置),但随着需求也可以调整配置自己需要的值。
提供大量项目通用的一系列非功能特性(例如嵌入式服务器,安全性,指标,健康检查,外部化配置)。
绝对没有代码生成,也不需要XML配置。
9. 系统要求
默认情况下,Spring Boot 1.5.6.RELEASE需要Java 7和Spring Framework 4.3.10.RELEASE或更高版本。您可以使用Spring Boot与Java 6进行一些其他配置。有关详细信息,请参见第84.11节“如何使用Java 6”。为Maven(3.2+)和Gradle 2(2.9或更高版本)和3提供了显式构建支持。
*虽然您可以使用Spring 6或7,但我们通常推荐Java 8。
9.1. Servlet容器
以下嵌入式servlet容器可直接是使用:
名称 | Servlet版本 | Java版本 |
---|---|---|
Tomcat 8 | 3.1 | Java 7+ |
Tomcat 7 | 3.0 | Java 6+ |
Jetty9.3 | 3.1 | Java 8+ |
Jetty9.2 | 3.1 | Java 7+ |
Jetty8 | 3.0 | Java 6+ |
Undertow 1.3 | 3.1 | Java 7+ |
您还可以将Spring Boot应用程序部署到任何Servlet 3.0+兼容容器。
10. 安装 Spring Boot
Spring Boot可以与“经典”Java开发工具一起使用或作为命令行工具安装。无论如何,您将需要Java SDK v1.6或更高版本。您应该在开始之前检查当前的Java安装:
$ java -version
如果您是Java开发的新手,或者您只想尝试使用Spring Boot,您可能需要首先尝试使用Spring Boot CLI,否则,请阅读“经典”安装说明。
*虽然Spring Boot与Java 1.6兼容,如果可能,您应该考虑使用最新版本的Java。
10.1. Java开发人员的安装说明
您可以使用与任何标准Java库相同的方式使用Spring Boot。只需spring-boot-*.jar
在您的类路径中包含相应的文件。Spring Boot不需要任何特殊的工具集成,所以可以使用任何IDE或文本编辑器; 并且Spring引导应用程序没有什么特别之处,因此您可以像任何其他Java程序一样运行和调试。
虽然您可以复制Spring Boot jar,但我们通常建议您使用支持依赖关系管理的构建工具(如Maven或Gradle)。
10.1.1. Maven安装
Spring Boot与Apache Maven 3.2兼容。如果您还没有安装Maven,可以按照maven.apache.org上的说明进行操作。
*在许多操作系统上,Maven可以通过软件包管理器进行安装。如果您是OSX Homebrew用户尝试brew install maven
。Ubuntu用户可以运行sudo apt-get install maven
。
Spring引导依赖使用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 http://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> <! - 继承自Spring Boot - > <parent> <groupId>org.springframework.boot </ groupId> <artifactId> spring-boot-starter-parent </ artifactId> <version> 1.5.6.RELEASE < / version> </ parent> <! - 添加Web应用程序的典型依赖关系 - > <dependencies> <dependency> <groupId> org.springframework.boot </ groupId> <artifactId> spring-boot-starter-web </ artifactId> </ dependency> </dependencies> <! - 作为可执行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继承,或者您可能不喜欢我们的默认设置。请参见 第13.2.2节“使用不带父POM的Spring Boot”作为使用import
范围的替代解决方案。
10.1.2. Gradle安装
Spring Boot与Gradle 2(2.9或更高版本)和Gradle 3兼容。如果您尚未安装Gradle,您可以按照www.gradle.org/上的说明进行操作。
Spring引导依赖关系可以使用org.springframework.boot
group
。通常,您的项目将声明一个或多个“启动器”的依赖关系 。Spring Boot提供了一个有用的Gradle插件 ,可用于简化依赖关系声明和创建可执行文件。
Gradle Wrapper
当您需要构建项目时,Gradle Wrapper提供了一种“获取”Gradle的好方法。它是一个小脚本和库,它与代码一起引导构建过程。有关详细信息,请参阅docs.gradle.org/2.14.1/userguide/gradle_wrapper.html。
这是一个典型的build.gradle
文件:
plugins { id 'org.springframework.boot' version '1.5.6.RELEASE' id 'java' } jar { baseName = 'myproject' version = '0.0.1-SNAPSHOT' } repositories { jcenter() } dependencies { compile("org.springframework.boot:spring-boot-starter-web") testCompile("org.springframework.boot:spring-boot-starter-test") }
10.2. 安装 Spring Boot CLI
Spring Boot CLI是一个命令行工具,如果要使用Spring快速原型,可以使用它。它允许您运行Groovy脚本,这意味着您具有熟悉的类似Java的语法,没有太多的样板代码。
您不需要使用CLI来使用Spring Boot,但它绝对是将Spring应用程序从本地开始的最快方法。
10.2.1. 手动安装
您可以从Spring软件版本库下载Spring CLI发行版:
spring-boot-cli-1.5.6.RELEASE-bin.zip
spring-boot-cli-1.5.6.RELEASE-bin.tar.gz
各个发布版本的快照快照。
下载后,请按照解压后的文件INSTALL.txt中的说明进行操作。总之:在下载的zip文件里的bin目录下有一个spring脚本文件(windows系统环境的spring.bat
),或者你可以用java -jar 运行.jar文件(脚本可帮助您确保类路径设置正确)。
10.2.2. 用 SDKMAN!安装
SDKMAN!(软件开发套件管理器)可用于管理各种二进制SDK的多个版本,包括Groovy和Spring Boot CLI。获取SDKMAN!从sdkman.io并安装Spring Boot
$ sdk install springboot $ spring --version Spring Boot v1.5.6.RELEASE
如果您正在开发CLI的功能,并希望轻松访问刚创建的版本,请遵循以下额外说明。
$ sdk install springboot dev /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-1.5.6.RELEASE-bin/spring-1.5.6.RELEASE/ $ sdk default springboot dev $ spring --version Spring CLI v1.5.6.RELEASE
这将安装一个spring
称为dev
实例的本地实例。它指向您的目标构建位置,因此每次重建Spring Boot时,spring
都将是最新的。
你可以看到它:
$ sdk ls springboot ============================================================================ Available Springboot Versions ============================================================================ > + dev * 1.5.6.RELEASE ============================================================================ + - local version * - installed > - currently in use ============================================================================
10.2.3. OSX Homebrew 安装
如果您在Mac上使用Homebrew,则您需要做的所有安装Spring Boot CLI都是:
$ brew tap pivotal / tap $ brew install springboot
自制将安装spring
到/usr/local/bin
。
*如果您没有看到公式,您的安装可能会过期。只需执行并重brew update试。
10.2.4. MacPorts 安装
如果您在Mac上使用MacPorts,则您需要做的所有安装Spring Boot CLI都是:
$ sudo port install spring-boot-cli
10.2.5. 命令行补全
Spring Boot CLI为BASH和zsh shell提供命令补全的功能。您可以在任何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。
10.2.6. 快速启动 Spring CLI 示例
这是一个非常简单的Web应用程序,可用于测试您的安装。创建一个名为app.groovy
@RestControoler class ThisWillActuallyRun { @RequestMapping("/") String home() { "Hello World!" } }
Then simply run it from a shell:
$ spring run app.groovy
*首先运行应用程序需要一些时间,因为下载依赖关系。后续运行将会更快。
在您的网络浏览器中打开localhost:8080,您应该会看到以下输出:
Hello World!
10.3. 从早期版本的Spring Boot 升级
如果您从早期版本的Spring Boot升级,请检查项目wiki上托管的“发行说明” 。您将找到升级说明以及每个版本的“新的和值得注意的”功能的列表。
要升级现有的CLI安装,请使用相应的软件包管理器命令(例如brew upgrade
),或者如果手动安装了CLI,请按照 标准说明记住更新PATH
环境变量以删除任何旧的引用。
11. 开发你的第一个 Spring Boot 应用程序
让我们开发一个简单的“Hello World!”的web应用程序,它可以突显出Spring Boot的一些主要功能。我们将采用Maven来构建该项目,因为大多的IDE都支持它。
*spring.io网站包含使用Spring的引导许多“入门”指南。如果您正在寻求解决具体问题;可以先看一下
您可以通过start.spring.io的web
依赖关系搜索器中选择启动器来快速完成以下步骤。这将自动生成一个新的项目结构,以便您立即开始编码。查看文档了解更多详细信息。
在开始之前,打开终端来检查您是否安装了有效的Java和Maven版本。
$ java -version java version "1.7.0_51" Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode) $ mvn -v Apache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-11T13:58:10-07:00) Maven home: /Users/user/tools/apache-maven-3.1.1 Java version: 1.7.0_51, vendor: Oracle Corporation
此示例需要在其自己的文件夹中创建。后续说明假设您已经创建了一个合适的文件夹,它是您的“当前目录”。
11.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 http://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>1.5.6.RELEASE</version> </parent> <!-- Additional lines to be added here... --> </project>
这应该给你一个工作的构建,你可以通过运行测试mvn package
(你可以暂时忽略警告:“jar will be empty - no content was marked for inclusion!”)。
*此时,您可以将项目导入到IDE中(最现代的Java IDE包括内置的Maven支持)。为了简单起见,我们将继续为此示例使用纯文本编辑器。
11.2. 添加类路径依赖关系
Spring Boot提供了一些“Starters”,可以方便地将jar添加到您的类路径中。我们的示例应用程序已经在parent
POM 的 一部分中使用了spring-boot-starter-parent
。这spring-boot-starter-parent
是一个提供有用的Maven默认值的特殊启动器。它还提供了一个 dependency-management
部分,以便您可以省略version
“blessed”依赖关系的标签。
其他“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
的依赖项:
<dependencies> <dependency> <groupId> org.springframework.boot </ groupId> <artifactId> spring-boot-starter-web </ artifactId> </ dependency> </ dependencies>
如果再次运行mvn dependency:tree
,您将看到现在有许多附加的依赖项,包括Tomcat Web服务器和Spring Boot本身。
11.3. 写代码
要完成我们的应用程序,我们需要创建一个单一的Java文件。Maven会编译源代码从src/main/java
,所以你需要创建一个文件夹结构,然后添加一个命名的文件默认情况下src/main/java/Example.java
:
import org.springframework.boot.*; import org.springframework.boot.autoconfigure.*; import org.springframework.stereotype.*; import org.springframework.web.bind.annotation.*; @RestController @EnableAutoConfiguration public class Example { @RequestMapping("/") String home() { return "Hello World!"; } public static void main(String[] args) throws Exception { SpringApplication.run(Example.class, args); } }
虽然这里没有太多的代码,但是相当多的是。我们来看看重要的部分。
11.3.1. @RestController 和 @RequestMapping 注解
我们的Example
的第一个注释是@RestController
。这被称为stereotype annotation。它为人们阅读代码提供了一些提示,对于Spring来说,这个类具有特定的作用。在这种情况下,我们的类是一个web,@Controller
所以Spring在处理传入的Web请求时会考虑它。
该@RequestMapping
注释提供“路由”的信息。告诉Spring,任何具有路径“/”的HTTP请求都应映射到该home
方法。该 @RestController
注解告诉Spring使得到的字符串直接返回给调用者。
*在@RestController
与@RequestMapping
注解是Spring MVC的注解(他们并不是专门针对Spring Boot)。有关更多详细信息,请参阅Spring参考文档中的MVC部分。
11.3.2. @EnableAutoConfiguration 注解
第二类注释是@EnableAutoConfiguration。这个注释告诉Spring Boot根据您添加的jar依赖关系来“猜”你将如何配置Spring。自从spring-boot-starter-web添加了Tomcat和Spring MVC后,自动配置将假设您正在开发Web应用程序并相应地设置Spring。
Starters和自动配置
自动配置旨在与“Starters”配合使用,但两个概念并不直接相关。您可以自由选择启动器之外的jar依赖项,Spring Boot仍然会自动配置您的应用程序。
11.3.3. main方法
我们的应用程序的最后一部分是main方法。这只是一个遵循Java惯例的应用程序入口点的标准方法。我们的main方法是SpringApplication通过调用委托给Spring Boot的run。SpringApplication将引导我们的应用程序,启动Spring,然后启动自动配置的Tomcat Web服务器。我们需要Example.class作为一个参数传递给run方法来判断SpringApplication哪个是Spring组件。该args数组也被传递以暴露任何命令行参数。
11.4. 运行示例
在这一点上我们的应用程序应该工作 既然我们使用了 spring-boot-starter-parentPOM,我们有一个有用的run目标,我们可以使用它来启动应用程序。mvn spring-boot:run从根项目目录中键入以启动应用程序:
$ mvn spring-boot:run . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.5.6.RELEASE) ....... . . . ....... . . . (log output here) ....... . . . ........ Started Example in 2.222 seconds (JVM running for 6.514)
如果你打开一个web浏览器到localhost:8080你应该看到以下输出:
Hello World!
正常退出应用程序命中ctrl-c
。
11.5. 创建一个可执行jar
让我们完成我们的例子,创建一个完全自包含的可执行文件,我们可以在生产中运行。可执行的jar(有时称为“fat jars”)是包含编译的类以及代码需要运行的所有jar依赖关系的归档。
可执行jar和Java
Java不提供任何标准的方法来加载嵌套的jar文件(即jar文件本身包含在jar中)。如果您正在寻找分发自包含的应用程序,这可能是有问题的。
为了解决这个问题,许多开发人员使用“uber”jars。一个uber jar简单地将所有类,从所有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 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:1.5.6.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
你也应该看到一个名为小得多文件myproject-0.0.1-SNAPSHOT.jar.original
的target
目录。这是Maven在由Spring Boot重新打包之前创建的原始jar文件。
要运行该应用程序,请使用以下java -jar
命令:
$ java -jar target / myproject-0.0.1-SNAPSHOT.jar 。____ _ __ _ _ / \\ / ___'_ __ _ _(_)_ __ _ \ \ \ \ (()\ ___ | '_ |' _ | |“_ \ / _` | \ \ \ \ \\ / ___)| | _)| | | | | || (_ | |)))) '| ____ | .__ | _ | | _ | _ | | _ \ __,| / / / / ========= | _ | ============== | ___ / = / _ / _ / _ / :: Spring Boot ::(v1。 5.6.RELEASE) ....... 。。 ....... 。。(log output here) ....... 。。 ........Started Example2.536秒(JVM running for 2.864)
像以前一样,要优雅地退出应用程序ctrl-c
。