社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
如果你刚刚开始入门Spring Boot,或者说是大体了解“Spring”,本章节正是你的一部分! 在这里我们回答基本的“what?”,“how”和“why?”的问题。 你会发现一个Spring Boot平缓的介绍和安装说明。 然后,我们将构建我们的第一个Spring Boot应用程序,并讨论一些核心原理。
Spring Boot 可以轻松创建基于Spring的独立、生产级应用,你可以只需运行。我们采取一个Spring平台和第三方库的主张,你可以以极少的研究开始。大多Spring Boot 应用需要非常少的Spring配置。
你可以用Spring Boot创建Java应用,并可以使用Java -jar
或者更多传统部署war包的方式启动它。我们也提供一个运行“spring脚本”的命令行工具。
我们的主要目标是:
默认Spring Boot 1.5.2.RELEASE 要求 Java 7 and Spring Framework 4.3.7.RELEASE 或以上版本。你可以进行一些额外的配置使Spring Boot和Java6一起使用。有关详细信息,请参见第84.11节“如何使用Java 6”。 Maven (3.2+), and Gradle 2 (2.9 or later) and 3.提供了明确的构建支持。
| 虽然您可以基于Java6或7使用Spring Boot,但如果有可能的话,我们通常要求Java8。
下列内嵌的Servlet 容器支持开箱即用:
名称 | Servlet版本 | Java版本 |
---|---|---|
Tomcat 8 | 3.1 | Java 7+ |
Tomcat 7 | 3.0 | Java 6+ |
Jetty 9.3 | 3.1 | Java 8+ |
Jetty 9.2 | 3.1 | Java 7+ |
Jetty 8 | 3.0 | Java 6+ |
Undertow 1.3 | 3.1 | Java 7+ |
您还可以将Spring Boot应用程序部署到任何Servlet 3.0+兼容容器。
Spring Boot可以与“经典”Java开发工具一起使用或作为命令行工具安装。 无论如何,您将需要Java SDK v1.6或更高版本。您应该在开始之前检查当前的Java安装:$ java -version
如果您是Java开发的新手,或者您只想尝试使用Spring Boot,您可能想要首先尝试使用Spring Boot CLI,否则,请继续阅读“经典”安装说明。
|
虽然Spring Boot与Java 1.6兼容,如果可能,您应该考虑使用最新版本的Java。
您可以使用与任何标准Java库相同的方式使用Spring Boot。 只需在您的类路径中包含适当的spring-boot - * .jar文件。Spring Boot不需要任何特殊的工具集成,所以可以使用任何IDE或文本编辑器;并且Spring Boot应用没有什么特别之处,因此您可以像任何其他Java程序一样运行和调试它。
虽然您可以只是复制Spring Boot jar,但我们通常建议您使用支持依赖管理的构建工具(如Maven或Gradle)。
Spring Boot与Apache Maven 3.2或以上版本兼容。 如果您还没有安装Maven,可以按照maven.apache.org上的说明进行操作。
| 在许多操作系统上,Maven可以通过一个包进行安装。 如果您是OSX Homebrew用户,请尝试使用brew install maven
。 Ubuntu用户可以运行sudo apt-get install maven
。
Spring Boot依赖使用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.2.RELEASE</version>
</parent>
<!-- 添加Web应用程序的典型依赖项 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!-- (使用Maven插件)打包为可执行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
scope)的替代解决方案。
Spring Boot与Gradle 2(2.9或更高版本)和Gradle 3兼容。如果您尚未安装Gradle,您可以按照www.gradle.org/上的说明进行操作。
Spring Boot依赖可以使用org.springframework.boot
group
声明。 通常,您的项目将声明一个或多个“启动器”的依赖。 Spring Boot提供了一个有用的Gradle插件,可用于简化依赖关系声明和创建可执行文件。
Gradle Wrapper
当您需要构建项目时,Gradle Wrapper提供了一种“获取”Gradle的好方法。 它是一个小脚本和库,与你的代码一起提交,引导构建过程。
有关详细信息,请参阅docs.gradle.org/2.14.1/userguide/gradle_wrapper.html。
这有一个典型的 build.gradle
file:
plugins {
id 'org.springframework.boot' version '1.5.2.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")
}
Spring Boot CLI是一个命令行工具,如果想要关于Spring的快速原型,可以使用它。 它允许您运行Groovy脚本,这意味着您具有熟悉的类似Java的语法,但没有太多的样板代码。
您不需要使用CLI来使用Spring Boot,但它绝对是将Spring应用程序从本地开始的最快方法。
您可以从Spring软件仓库下载Spring CLI发行版:
SDKMAN! (软件开发套件管理器)可用于管理各种二进制SDK的多个版本,包括Groovy和Spring Boot CLI。 获取SDKMAN! 从sdkman.io并安装Spring Boot:
$ sdk install springboot
$ spring --version
Spring Boot v1.5.2.RELEASE
如果您正在开发CLI的功能,并希望轻松访问刚创建的版本,请遵循以下额外说明。
$ sdk install springboot dev /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-1.5.2.RELEASE-bin/spring-1.5.2.RELEASE/
$ sdk default springboot dev
$ spring --version
Spring CLI v1.5.2.RELEASE
这将安装一个称为dev实例的spring的本地实例。它指向您的目标构建位置,所以每次重建Spring Boot时,Spring将更新为最新的。
通过做这个你可以看到它:
$ sdk ls springboot
================================================================================
可用的 Springboot 版本
================================================================================
> + dev
* 1.5.2.RELEASE
================================================================================
+ - local version
* - installed
> - currently in use
================================================================================
如果您在Mac环境上,并使用Homebrew,则您需要做的所有安装Spring Boot CLI的操作是:
$ brew tap pivotal/tap
$ brew install springboot
Homebrew
将spring
安装到/usr/local/bin
。
| 如果您没有看到公式,您的brew 安装可能已过期。 只需执行brew update
,然后重试。
如果您在Mac环境上,并使用MacPorts,那么您需要做的所有安装Spring Boot CLI的操作是:$ sudo port install spring-boot-cli
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将自动注册。
这是一个非常简单的Web应用程序,可用于测试您的安装。 创建一个名为app.groovy的文件:
@RestController
class ThisWillActuallyRun {
@RequestMapping("/")
String home() {
"Hello World!"
}
}
然后简单地从shell运行它:
$ spring run app.groovy
如果您正在从Spring Boot的一个早期发布的版本升级,请检查托管在项目wiki上的“发行说明”。 您将找到升级说明以及每个版本的“新的和值得注意的”功能的列表。
要升级现有的CLI安装,请使用相应的package manager命令(例如brew upgrade),或者如果您手动安装了CLI,请按照标准说明记住更新PATH环境变量以删除任何旧的引用。
让我们在Java中开发一个简单的“Hello World!”Web应用程序,突出显示一些Spring Boot的主要功能。 我们将使用Maven构建该项目,因为大多数IDE支持它。
| spring.io网站包含许多使用Spring Boot的“入门指南”。 如果您正在期待着解决具体问题; 首先查看那里。
您可以通过转到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)
maven
$ 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
此示例需要在其自己的文件夹中创建。后续假设您已经创建了一个合适的文件夹,并且它是您的“当前目录”。
我们需要先创建一个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.2.RELEASE</version>
</parent>
<!-- Additional lines to be added here... -->
</project>
这应该给你一个工作的构建,你可以通过运行 mvn package
来测试它(你可以忽略“jar将是空的 - 没有内容被标记为包含!”对现在的警告)。
| 此时,您可以将项目导入到IDE中(最现代的Java IDE包括内置的Maven支持)。 为了简单起见,我们将继续为此示例使用纯文本编辑器。
Spring Boot提供了一些“启动器”,可以方便地将jar添加到您的classpath中。我们的示例应用程序已经在POM的 parent
节点中使用了spring-boot-starter-parent
。spring-boot-starter-parent
是一个提供有用的Maven默认值的特殊启动器。 它还提供 dependency-management 节点,以便您可以省略“有福”依赖的 version
标签。
其他“启动器”只是提供当您在开发特定类型的应用时可能需要的依赖。 由于我们正在开发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
并添加 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本身。
要完成我们的应用程序,我们需要创建一个单一的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);
}
}
虽然这里没有太多的代码,(但)相当多的事情正在继续。让我们来看看重要的部分。
在我们Example
类上第一个注解是@RestController
,这被称为构造型(stereotype)注解。它为人们阅读代码提供了一些提示,并且对于Spring来说,这个类饰演一个特定的角色。 在这种情况下,我们的类是一个web @Controller
,所以Spring在处理传入的Web请求时会考虑它。
该@RequestMapping
注解提供“路由”的信息。它告诉Spring任何来自路径“/”的HTTP请求都应映射到home
方法。@RestController
注解告诉Spring将生成的字符串直接返回给调用者。
|@RestController
和@RequestMapping
是Spring MVC的注解(它们不是Spring Boot特有的)有关更多详细信息,请参阅Spring参考文档中的MVC 章节。
第二个类级别的注解是@EnableAutoConfiguration
这个注解告诉Spring Boot根据您已添加的jar依赖来“猜测”你将如何配置Spring。由于 spring-boot-starter-web
添加了Tomcat和Spring MVC,自动配置将假定您正在开发Web应用程序并相应地设置Spring。
启动器和自动配置
自动配置被设计为与“启动器”很好的配合使用,但两个概念并不直接捆绑。
您可以自由选择启动器之外的jar依赖项,Spring Boot仍然会尽力而为自动配置您的应用程序。
我们应用程序的最后一部分是 main
方法。这只是一个遵循Java惯例的应用程序入口点的标准方法。我们的main方法通过调用 run.
,(将业务)委托到Spring Boot的 SpringApplication
类。 SpringApplication
将引导我们的应用程序,启动Spring,然后将依次启动自动配置的Tomcat Web服务器。我们需要将 Example.class
作为一个参数传递给 run
方法来告诉 SpringApplication
,它是主要的Spring组件。 还传递了 args
数组以暴露任何命令行参数。
在这一点上,我们的应用程序应该工作。 由于我们使用了 spring-boot-starter-parent
POM,所以我们有了一个有用的 run
目标,我们可以使用它来启动应用程序。 (也可以)键入 mvn spring-boot:run
从项目根目录运行去启动应用程序:
$ mvn spring-boot:run
. ____ _ __ _ _
/\ / ___'_ __ _ _(_)_ __ __ _
( ( )___ | '_ | '_| | '_ / _` |
\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |___, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.5.2.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.222 seconds (JVM running for 6.514)
如果你打开一个web浏览器到localhost:8080你应该看到以下输出:
Hello World!
要正常退出应用程序,请点击ctrl-c。
让我们通过创建一个完全自包含的可执行的jar文件来完成我们的示例,我们可以(让它)在生产环境中运行。可执行的jar(有时称为“肥胖 jars”)是包含你编译的类以及代码需要运行的所有jar依赖的归档。
可执行的jars和Java
Java不提供任何标准的方法来加载嵌套的jar文件(即 jar 文件自己包含一个jar在内)。 如果您正在寻找分发一个自包含的应用程序,这可能是有问题的。为了解决这个问题,许多开发人员使用“uber”jar。 一个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包含绑定repackage
目标的<executions>
配置。如果您不使用父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.2.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
您还应该在 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 :: (v1.5.2.RELEASE)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)
像以前一样,要正常退出应用程序,点击ctrl-c
。
希望本节已为您提供一些Spring Boot基础知识,并让您以自己的方式编写自己的应用程序。 如果你是一个任务导向的开发人员,你可能想跳过spring.io,查看一些解决具体的“如何用Spring”问题的入门指南; 我们还有Spring Boot-specific How-to参考文档。
Spring Boot库还有一大堆可以运行的示例。 示例对于rest和代码(来说)是独立的(这就是您不需要构建rest服务来运行或使用样本)。
否则,下一个逻辑步骤是阅读 第三部分, “使用 Spring Boot”。 如果你真的不耐烦,你也可以向前跳去阅读关于Spring Boot 特性。
第一部分和第二部分翻译完毕,继续阅读请移步到这里
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!