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按照说明操作
|
|
在许多操作系统中都可以使用软件包管理器安装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>
|
|
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.
|
|
如果你没有看到公式,你的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开始。
|
|
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.
|
|
@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>
|
|
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
若要退出程序,按ctrl-c.。
-
along with:随着,以及
-
stand-alone:独立的
-
production-grade:生产级的
-
Spring-based:基于Spring的
-
third-party libraries:第三方库
-
Fuss:小题大做,麻烦
-
primary:主要的,初级的
-
radically:根本上
-
a range of:一系列的
-
metrics:指标
-
Absolutely:绝对的
-
RELEASE:发布
-
container:容器
-
recommend:建议
-
generally:通常
-
compatible:兼容
-
follow the instructions:安装说明操作
-
prompt:提示
-
Typically:通常
-
executable:可执行的
-
prototype:原型
-
syntax:句法 语法
-
boilerplate:样板
-
get a Spring application off the ground:启动Spring Boot应用程序
-
distribution:分布,分发
-
archive:档案,归档
-
Alternatively:另外
-
manual:手动的,手册
-
multiple:多个
-
highlights:强调,突出
-
right away:立马
-
folder:文件夹
-
is designed to:旨在
-
concept:概念
-
convention:约定
-
nested:嵌套的,内装的