Spring Boot 官网文档简单翻译 Part II

Part II. Getting Started

文档说明:

  • 文档对应的版本为 2.1.0.M3
  • 这不是文档的完整中文翻译,也有可能跟原文文字不一一对应,只是我阅读文档时候做的简单笔记
  • 如果对应的章节没有任何中文,有可能是文档内容比较少,建议直接看原文,或者是我不感兴趣的部分
  • 目录标题没有做翻译,首先标题一般一眼就能看懂什么意思,不做翻译还能保证原文意思,其次也方便对应到原文位置

8. Introducing Spring Boot

Spring Boot 让创建一个独立的、生产级别的、基于 Spring 的应用更加容易。
主要目标:

  • 对于开发所有的 Spring 应用,提供一个非常快和非常容易理解的体验
  • 能快速适应需求变化
  • 提供大量非业务逻辑的通用功能,例如内嵌服务,安全,统计,健康检查和外部配置
  • 绝对没有代码生成和XML配置 (原文:Absolutely no code generation and no requirement for XML configuration)

9. System Requirements

Spring Boot 2.1.0.M3 requires Java 8 or 9 and Spring Framework 5.1.0.RC3 or above.
其他版本的 Spring Boot 请参看对应版本的文档。

10. Installing Spring Boot

JDK 1.8 or Spring Boot CLI(Command Line Interface)

10.1 Installation Instructions for the Java Developer

可以把相关的 spring-boot-*.jar 拷贝到 classpath,但推荐使用构建工具。

10.1.1 Maven Installation

Spring Boot 依赖于 groupId 为 org.springframework.boot 的组件。
一般来说都是依赖 spring-boot-starter-parent 组件,也可以根据需要添加更多的 Starter。
spring-boot-starter-parent 并不总是适用,可以参考 “Using Spring Boot without the Parent POM” 章节

<?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.1.0.M3</version>
    </parent>
    ...
<project/>

10.1.2 Gradle Installation

依赖的东西是一样的,但是配置的语法有所不一样

10.2 Installing the Spring Boot CLI

Spring Boot CLI 是一个可以运行 Groovy 脚本来快速获取 Spring 应用的工具。

10.2.1 Manual Installation

10.2.2 Installation with SDKMAN!

SDKMAN:The Software Development Kit Manager
SDKMAN 用来管理多个版本的二进制 SDK,包括 Groovy 和 Spring Boot CLI。
从 sdkman.io 安装 SDKMAN,然后运行下面的脚本

$ sdk install springboot
$ spring --version
Spring Boot v2.1.0.M3

10.2.3 OSX Homebrew Installation

10.2.4 MacPorts Installation

10.2.5 Command-line Completion

10.2.6 Windows Scoop Installation

10.2.7 Quick-start Spring CLI Example

@RestController
class ThisWillActuallyRun {
    @RequestMapping("/")
    String home() {
        "Hello World!"
    }
}

Then run it from a shell, and Open localhost:8080 in your favorite web browser to check the status

$ spring run app.groovy

10.3 Upgrading from an Earlier Version of Spring Boot

如果你想从一个比较旧的版本升级到比较新的版本,建议先查阅官方的 "migration guide" on the project wiki

Spring 提供了一个分析你的应用环境并打印出来建议的方法,还可以临时迁移属性。启用这个功能,需要添加如下配置

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-properties-migrator</artifactId>
    <scope>runtime</scope>
</dependency>

11. Developing Your First Spring Boot Application

开发你的第一个 Spring Boot 应用:通过一个简单的 HelloWorld Web 应用,介绍 Spring Boot 的关键特性。
建议先检查一下 java 和 maven 的版本:

# Java 要求 1.8 或者以上
java -version
# Maven 要求 3.2 或者以上
mvn -v

11.1 Create the POM

POM 文件可看做是你项目的“食谱”。

<?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>2.1.0.M3</version>
    </parent>

    <!-- Additional lines to be added here... -->

    <!-- (you don't need this if you are using a .RELEASE version) -->
    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots><enabled>true</enabled></snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <url>https://repo.spring.io/milestone</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <url>https://repo.spring.io/snapshot</url>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <url>https://repo.spring.io/milestone</url>
        </pluginRepository>
    </pluginRepositories>
</project>

上面的例子应该给到你一个可以工作的构建,可以通过 mvn package 来验证一下。你也可以在你熟悉的 IDE 添加这些内容。

11.2 Adding Classpath Dependencies

Spring Boot 提供了很多 Starters 来让你添加 jar 依赖到你的 classpath。文档上面的应用例子已经在 POM 文件里面的 parent 节点使用了 spring-boot-starter-parent。这个 spring-boot-starter-parent 是一个特殊的 starter,它提供了很多有用的 Maven 默认值。文档后面还提供了 "13.1 Dependency Management" 章节来介绍依赖管理,你可以在引入依赖的时候忽略版本号。
当开发特定类型的应用时,其他 "Starters" 会提供你需要的依赖。例如我们要开发一个 Web 应用,我们会添加 spring-boot-starter-web 的 starter 依赖。在这之前,我们可以查看现在项目都有哪些依赖

$ mvn dependency:tree

[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT

mvn dependency:tree 命令会打印并以树形展示你项目的依赖,添加 spring-boot-starter-web 后,再执行该命令看下输出

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

11.3 Writing the Code

Maven 默认会从 src/main/java 目录编译代码。
src/main/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) throws Exception {
        SpringApplication.run(Example.class, args);
    }

}

11.3.1 The @RestController and @RequestMapping Annotations

Example.java 的第一个注解 @RestController 是一个 stereotype 注解,它向阅读代码的人和 Spring 表明了它在充当 Web 应用的 @Controller 角色。
@RequestMapping 注解提供了“路由”信息。它告诉 Spring 所有带有 "/" 的 HTTP 请求都应该映射到 home 路径。@RestController 注解告诉 Spring 应该渲染结果内容并直接返回给调用方。
@RestController 和 @RequestMapping 都是 Spring MVC 的注解,并不是 Spring Boot 特有的注解。

11.3.2 The @EnableAutoConfiguration Annotation

@EnableAutoConfiguration 注解告诉 Spring Boot 根据你引入的 jar 依赖去“猜猜”你想怎样配置 Spring。spring-boot-starter-web 会自动引入 Tomcat 和 Spring MVC 组件,Spring Boot 的自动装配机制会认为你在开发一个 Web 应用。

Starters and Auto-configuration:Auto-configuration 是被设计来和 starter 协作的,但这两个概念并不是直接绑定的。你可以选择不以 starter 的方式来添加 jar 依赖,Spring Boot 的 Auto-configuration 仍然会做好其本分工作。

11.3.3 The "main" Method

例子代码的最后部分就是 main 方法。这个 main 方法只是 Java 代码运行的主入口。我们的 main 方法委托给了 Spring Boot's SpringApplication.run() 方法。SpringApplication 启动了应用。

11.4 Running the Example

到了这里,你的应用可以运行了。由于引用了 spring-boot-starter-parent,你会拥有启动应用的 run 脚本。在应用根目录下输入 mvn spring-boot:run 命令,然后在浏览器 输入 localhost:8080 验证服务是否启动成功。

$ mvn spring-boot:run

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v2.1.0.M3)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.222 seconds (JVM running for 6.514)

11.5 Creating an Executable Jar

Executable jar 是包含编译的 class 文件和所有 jar 依赖文件的 jar。

Java 没有提供关于加载嵌入 jar 文件(在 jar 文件里面包含另外的 jar 文件)的标准,命令行这种 jar 文件在不解压就在就可能会有问题。
为解决这个问题,很多开发者都通过共享 jar 的形式来处理。一个共享的 jar 包含了所有的类和 jar,并放进一个 jar 文件里面。这样你很难知道里面包含了多少库的依赖,而且还可能有文件重名的问题。
Spring Boot 采取了不同的做法,它让你直接内嵌 jar 文件。

为了创建一个可执行 jar 文件,需要在 POM 文件添加一个插件:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

通过 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.1.0.M3:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

如同日志输出的内容显示,打包好的文件会输出到 target/myproject-0.0.1-SNAPSHOT.jar。
可以解压该 jar 文件看看里面的内容:

$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar

运行该 jar 文件:

$ java -jar target/myproject-0.0.1-SNAPSHOT.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v2.1.0.M3)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)

12. What to Read Next

相关文章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,682评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,277评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,083评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,763评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,785评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,624评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,358评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,261评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,722评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,900评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,030评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,737评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,360评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,941评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,057评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,237评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,976评论 2 355

推荐阅读更多精彩内容