PartII .Spring boot官网翻译--入门

Part II. 入门

一般来说,如果你已经开始使用Spring Boot,你可以从这章开始读,本章回答了你基本的’是什么’,’怎么做’,’为什么’问题,这里包括Spring Boot的介绍以及安装说明,然后我们引导您构建您的第一个Spring Boot应用程序,讨论一些核心原理。

8. 介绍Spring Boot

Spring Boot使你更容易的创建独立的、生产级的、基于Spring的可运行应用程序,我们对Spring平台和第三方库采取自己的观点,这样您就可以轻松开始了,大多数的Spring Boot应用程序只需要非常少的Spring配置。

您可以使用Spring Boot创建用java -jar开始或者更传统的war包部署的java应用程序,我们也提供一些运行“spring script”的命令行工具。

我们主要的目标是:

  • 为所有Spring开发从根本上提供更快且广泛入门体验

  • 跳出固有的思维模式,但是随着需求开始偏离默认值,我们要迅速避让

  • Be opinionated out of the box but get out of the way quickly as requirements start to diverge from the defaults

  • 提供一些对于大型项目来说通用的一些列的非功能性功能,例如:嵌入式服务器,安全性,指标,健康检查和外部化配置

  • 绝对没有代码生成也没有XML配置

9. 系统要求

Spring Boot 2.0.4.RELEASE 要求 Java 8 or 9 和 Spring Framework 5.0.8.RELEASE或以上,为Maven 3.2+ 和 Gradle 4提供了明确的构建支持。

9.1 Servlet容器

Spring Boot支持下列嵌入式容器:

Name

Servlet 版本

Tomcat 8.5

3.1

Jetty 9.4

3.1

Undertow 1.4

3.1

你也可以发布Spring Boot应用程序到任何Servlet 3.1+兼容的容器

10. 安装Spring Boot

Spring Boot可以和经典java开发工具一起使用,或者用命令行工具安装,无论哪种方法,你需要 Java SDK v1.8 或者更高,在你开始之前,你应该使用下列命令检查当前的版本:

$ java -version

如果你是刚刚学习Java开发或者你想尝试Spring Boot,那么你可能想要尝试 Spring Boot CLI (命令行接口),否则,继续阅读经典安装说明。 

10.1 Java Developer的安装说明

你可以像任何的标准Java库一样的方式使用Sprint Boot,在你的类路径里面配置 spring-boot-*.jar ,Spring Boot不需要任何特殊的工具集成,所以你可以使用IDE或者文本编辑器,此外,Spring Boot应用程序没有比较特殊的地方,所以你可以运行或者debug它像其他的Java项目一样。

虽然可以复制Spring Boot的jar包,但我们还是建议你使用支持依赖关系管理的构建工具,比如Maven或者gradle。

10.1.1 Maven 安装

Spring Boot兼容Apache Maven 3.2 或者更高的版本,如果你没有安装Maven,可以在maven.apache.org按照说明操作

PartII .Spring boot官网翻译--入门

 

在许多操作系统中都可以使用软件包管理器安装Maven,如果你使用OSX Homebrew,用这个命令: brew install maven.,Ubuntu用户运行sudo apt-get install maven. 使用Chocolatey的Windows用户可以按管理员提示运行 choco install maven 

Spring Boot 的所有以来使用 org.springframework.boot groupId. 这个项目组,通常,你的MavenPOM 文件集成spring-boot-starter-parent 的项目,然后声明一个或多个“Starters”的依赖, Spring Boot 也提供可选择的Maven插件来添加可执行的jars。

下面的展示了一个典型的 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>

        <!-- Inherit defaults from Spring Boot -->

        <parent>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-starter-parent</artifactId>

                <version>2.0.4.RELEASE</version>

        </parent>

        <!-- Add typical dependencies for a web application -->

        <dependencies>

                <dependency>

                        <groupId>org.springframework.boot</groupId>

                        <artifactId>spring-boot-starter-web</artifactId>

                </dependency>

        </dependencies>

        <!-- Package as an executable jar -->

        <build>

                <plugins>

                        <plugin>

                                <groupId>org.springframework.boot</groupId>

                                <artifactId>spring-boot-maven-plugin</artifactId>

                        </plugin>

                </plugins>

        </build>

</project>

PartII .Spring boot官网翻译--入门

 

 spring-boot-starter-parent 是使用Spring Boot的好方法,但是它并不是所有时候都合适,有的时候你可能需要集成不同父POM,或者你也许不喜欢我们的默认配置,在那些情况下,参考这一节 Section 13.2.2, “Using Spring Boot without the Parent POM” ,13.2.2节,使用不带父POM的Spring Boot,通过使用一个import scope作为替代的解决方案。

10.1.2 Gradle 安装

Spring Boot兼容 Gradle 4. 如果你没有安装Gradle,你可以按照此gradle.org.说明操作。

Spring Boot 的所有以来都可以使用e org.springframework.boot group. 项目组来声明,通常,你的项目会声明一个或者多个“Starters”. 的项目以来,Spring Boot 提供一个Gradle plugin ,它简化依赖声明和创建可执行的jars是很有用的。

Gradle Wrapper

当你需要构建项目时,Gradle Wrapper提供了一个很好的“obtaining”Gradle的方法,它是一个小的脚本和库,可以和代码一起提交来引导构建过程,看这里了解更多细节docs.gradle.org/4.2.1/userguide/gradle_wrapper.html 

下面展示典型的build.gradle 文件:

plugins {

        id 'org.springframework.boot' version '2.0.4.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的语法,没有太多的样板代码。

使用Spring Boot的时候你不一定需要使用Spring Boot CLI,但是它一定是启动Spring Boot应用程序的最快捷方式。

10.2.1 手动安装

你可以从Spring 软件库下载Sprint CLI分发包。

最先进的快照分发 snapshot distributions 也可以获取。

下载完成后,按照这个说明INSTALL.txt 解压档案,总之,在.zip 的bin/ 目录下有一个 spring 脚本 (Windows下是spring.bat ),另外,你可以使用 java -jar 来运行一个.jar 文件 (这个脚本会帮助你确定classpath被正确设置)。

10.2.2 SDKMAN!安装

SDKMAN! (软件开发工具管理器)可以用来管理各种二进制SDK的多个版本,包括 Groovy 和 Spring Boot CLI,从sdkman.io 获取SDKMAN!,使用以下命令安装Spring Boot

$ sdk install springboot

$ spring --version

Spring Boot v2.0.4.RELEASE

如果你为CLI开发功能并想要轻松访问你的构建版本,使用下列命令:

$ sdk install springboot dev /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-2.0.4.RELEASE-bin/spring-2.0.4.RELEASE/

$ sdk default springboot dev

$ spring --version

Spring CLI v2.0.4.RELEASE

前面的说明安装了一个名为 dev 实例的本地 spring 实例,它指向你的目标构建位置,所以每次重新构建Sprint Boot,spring 都是最新的。

你可以运行一下命令查看:

$ sdk ls springboot

================================================================================

Available Springboot Versions

================================================================================

> + dev

* 2.0.4.RELEASE

================================================================================

+ - local version

* - installed

> - currently in use

================================================================================

10.2.3 使用OSX Homebrew 安装

如果你是mac或者使用Homebrew ,你可以使用下列命令行安装Spring Boot CLI:

$ brew tap pivotal/tap

$ brew install springboot

Homebrew 安装 spring 到这个目录下 /usr/local/bin.

PartII .Spring boot官网翻译--入门

 

如果你没有看到公式,你的brew安装也许不是最新的,这种情况下,你运行 brew update 重新尝试一下。 

10.2.4 使用MacPorts 安装

如果你是mac或者使用 MacPorts,你可以使用下列命令行安装Spring Boot CLI:

$ sudo port install spring-boot-cli

10.2.5 Command-line Completion

10.2.6 Windows Scoop Installation

10.2.7 Quick-start Spring CLI Example

10.3 Upgrading from an Earlier Version of Spring Boot

考虑到实用性,以上10.2.5-10.3省略翻译。

11. 开发你的第一个Spring Boot应用程序

这章节描述了怎么开发一个简单的 “Hello World!”web应用程序,并突出了一些Spring boot的主要特征,我们使用Maven来构建这个项目,从受欢迎的idea开始。 

PartII .Spring boot官网翻译--入门

 

spring.io 网站包含了许多实用Spring Boot的入门指南,如果你需要你需要解决一些特殊的问题,请先查看它。

你可以到 start.spring.io 从依赖搜索中选择“web”启动器来快捷的执行一下步骤,这样做生成一个新的项目结构以至于你可以立刻开始编 start coding right away码。参考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.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T16:41:47+00:00)

Maven home: /usr/local/Cellar/maven/3.3.9/libexec

Java version: 1.8.0_102, vendor: Oracle Corporation

11.2 添加类路径依赖

Spring Boot提供一些“Starters”,让你添加你的jar包到类路径下,在POM章节的parent ,我们的示例应用程序已经使用了spring-boot-starter-parent ,这个 spring-boot-starter-parent 是一个特殊的启动器,提供有用的maven默认值,它也提供dependency-management 部分,所以你可以忽略依赖中 version 这个标签。

其他的“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 没有提供Spring boot本身,为了添加必要的依赖项,编辑你的 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它自己。

11.3.1 @RestController 和 @RequestMapping 注解

在我们Example 类中的第一个 @RestController  注解被称为构造型注解,它为阅读代码的人提供一些提示,并且对于Spring来说,这个类扮演者特殊的角色,在这种情况下,我们的类是一个web @Controller, 所以当处理web请求的时候Spring会考虑它。

@RequestMapping 注解提供路由信息,它告诉Spring,任何带有 / 路径的HTTP请求都应该被映射到 home 方法上,@RestController 注解告诉Spring将结果字符串直接渲染回调者。annotation tells Spring to render the resulting string directly back to the caller.

PartII .Spring boot官网翻译--入门

 

 @RestController 和 @RequestMapping 注解是Spring MVC 注解, (不是Spring boot特有的) ,看Spring 参考文档的 MVC section获取更多细节

11.3.2  @EnableAutoConfiguration 注解

第二个类级注解是 @EnableAutoConfiguration ,这个注解告诉Spring boot去猜测你想怎么基于添加的jar依赖项去配置Spring,从spring-boot-starter-web 添加了Tomcat和Spring MVC,自动配置假设你想开发一个web应用程序,从而设置Spring。

Starters and Auto-configuration启动器和自动配置

Auto-configuration自动配置旨在结合启动器配合使用,但是这两个概念没有直接的联系在一起,你可以*的选择启动器以外的jar依赖项,Spring Boot仍然可以更好的自动配置你的应用程序。

11.3.3 The “main” Method

我们的应用程序最后一部分是 main 方法,是一个应用程序入口点遵循java约定的标准方法,我们的主方法中调用Spring Boot的SpringApplication 类的run方法,引导我们的应用程序,启动我们的Spring,然后启动我们自动配置好的Tomcat服务器,我们需要 Example.class 作为一个参数来 run 方法去告诉 SpringApplication 这是一个主要的Spring组件, args 数组也作为参数为了暴漏任何命令行参数。

11.5 创建一个可执行的 Jar

我们通过创建一个完整独立可执行的jar来完成实例,这个jar可以运行在生产环境,可执行jar是指包含已编译的类以及所有你的代码运行时所有的jar依赖的归档。

可执行的jar和java

Java没有提供一个标准的方法来加载内置的jar文件(jar文件本身包含在jar中),如果你想分发一个自包含的应用程序,这可能是有问题的。 

为了解决这个问题,许多开发者使用“uber”jars,一个uber的jar包把所有来自应用程序依赖的类都打包成一个归档,这种方法的问题就是很难看到你的应用程序中的库,而且如果在多个jar包中有同样名字的文件但是内容不同的也会一个问题。

Spring Boot 采用不同的方法 different approach 让你直接嵌入jars

为了创建一个可执行的jar,我们需要添加spring-boot-maven-plugin 到我们的 pom.xml 文件里,像这样,在依赖部分下面插入下面几行:

<build>

        <plugins>

                <plugin>

                        <groupId>org.springframework.boot</groupId>

                        <artifactId>spring-boot-maven-plugin</artifactId>

                </plugin>

        </plugins>

</build>

PartII .Spring boot官网翻译--入门

 

 spring-boot-starter-parent POM包含 <executions> 配置以绑定重新打包目标,如果你不实用父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.0.4.RELEASE:repackage (default) @ myproject ---

[INFO] ------------------------------------------------------------------------

[INFO] BUILD SUCCESS

[INFO] ------------------------------------------------------------------------

如果你看到target 目录,你应该看 myproject-0.0.1-SNAPSHOT.jar,这个文件应该超过10M,如果你想偷看里面,你可以使用 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

PartII .Spring boot官网翻译--入门

若要退出程序,按ctrl-c.。

  1. along with:随着,以及

  2. stand-alone:独立的

  3. production-grade:生产级的

  4. Spring-based:基于Spring的

  5. third-party libraries:第三方库

  6. Fuss:小题大做,麻烦

  7. primary:主要的,初级的

  8. radically:根本上

  9. a range of:一系列的

  10. metrics:指标

  11. Absolutely:绝对的

  12. RELEASE:发布

  13. container:容器

  14. recommend:建议

  15. generally:通常

  16. compatible:兼容

  17. follow the instructions:安装说明操作

  18. prompt:提示

  19. Typically:通常

  20. executable:可执行的

  21. prototype:原型

  22. syntax:句法 语法

  23. boilerplate:样板

  24. get a Spring application off the ground:启动Spring Boot应用程序

  25. distribution:分布,分发

  26. archive:档案,归档

  27. Alternatively:另外

  28. manual:手动的,手册

  29. multiple:多个

  30. highlights:强调,突出

  31. right away:立马

  32. folder:文件夹

  33.  is designed to:旨在

  34. concept:概念

  35. convention:约定

  36. nested:嵌套的,内装的