Spring Boot文档(003)-第二部分

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为BASHzsh 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.ioweb依赖关系搜索器中选择启动器来快速完成以下步骤。这将自动生成一个新的项目结构,以便您立即开始编码。查看文档了解更多详细信息

在开始之前,打开终端来检查您是否安装了有效的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添加到您的类路径中。我们的示例应用程序已经在parentPOM 的 一部分中使用了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依赖关系的归档。

可执行jarJava

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-parentPOM包括<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

12. 接下来读什么

转载于:https://my.oschina.net/u/128964/blog/1517874

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值