《Spring Boot官方指南》(二)入门

Spring Boot使创建基于Spring的应用程序变得轻松,您只需要做到“just run”就能创建一个独立的、产品级别的Spring应用程序。我们为Spring平台及第三方库提供了相对固定的搭配,所以您开始的时候会轻松很多。大部分的SpringBoot应用程序都只需要很少的Spring配置。

您可以使用SpringBoot创建应用程序,通过java -jar命令或者传统的war包部署方式来启动它。我们也提供了一个命令行工具来运行“spring脚本”。

我们的目标是:

  • 从根本上提供更加快速和简便的Spring开发体验。
  • 开箱即用,但定制开发也很便捷。
  • 提供一些大型项目常用的非功能性特性(例如:嵌入式服务、安全、监控、健康检查、外部配置)。
  • 不用生成代码,没有xml配置。

2. 系统要求

一般情况下,Spring Boot1.4.1.BUILD-SNAPSHOT要求Java 7以及 Spring Framework 4.3.3.BUILD-SNAPSHOT或者更高版本。您可以在Java 6的环境下使用Spring Boot,但是需要一些额外的配置。访问Section 80.11, “How to use Java 6”获得更多详细说明。需要明确的是,Maven需要3.2或者更高版本,Gradle需要1.12或者2.x。Gradle 3 不支持。

[Tip] Tip
虽然您可以在Java 6或者7下使用Spring Boot,但我们一般还是建议尽可能的使用Java 8。

2.1 Servlet容器

下面的嵌入式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+

您也可以在兼容Servlet 3.0+ 的容器中部署Spring Boot 应用。

3. 安装Spring Boot

Spring Boot可以和“经典的”Java开发工具一起使用,也可以安装成一个命令行工具。无论如何,您需要Java SDK v1.6或者更高的版本。开始之前,确认一下您的Java版本:

$ java -version

如果您是Java开发新手,或者您只是想体验一下Spring Boot,
第一步您可以选择去Spring Boot CLI 试一试。或者,继续看“经典的”安装介绍。

[Tip] Tip
虽然Spring Boot可以兼容Java 6,但是还是尽可能使用最新版本的Java。

3.1 Java开发者使用的安装教程

您可以像使用其他标准Java库一样使用Spring Boot。只需要将相关的spring-boot-*.jar文件包含进您的classpath。Spring Boot不需要使用特殊的工具进行集成,因此您选择任何IDE或者文本编辑器都可以;并且Spring Boot应用程序也没有任何特殊规范,您可以像其他Java程序一样来运行和调试它。

虽然您可以复制Spring Boot jars,但是我们建议使用支持依赖管理的构建工具(比如Maven或者Gradle)。

3.1.1 Maven安装

Spring Boot与Apache Maven 3.2或者更高的版本兼容。如果您还没有安装Maven,可以去maven.apache.org阅读相关教程。

[Tip] Tip
很多操作系统可以使用包管理工具来安装Maven,苹果的OSX操作系统Homebrew使用者可以试试brew install maven。Ubuntu用户可以运行这个命令sudo apt-get install maven

Spring Boot 依赖的groupIdorg.springframework.boot。通常情况下,您的MavenPOM文件继承自spring-boot-starter-parent项目,并且声明为一些“Starters”。Spring Boot也提供了一些创建可执行jar文件的Maven插件

这是一个典型的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.4.1.BUILD-SNAPSHOT</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>http://repo.spring.io/snapshot</url>
            <snapshots><enabled>true</enabled></snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </pluginRepository>
    </pluginRepositories>
</project>
[Tip] Tip
继承spring-boot-starter-parent项目是不错的使用Spring Boot的方式,但是有时候可能还是有不适配的问题。有些时候您可能需要继承子不同的父POM,或者仅仅是和我们的默认配置有所区别。查看Section 13.2.2, “Using Spring Boot without the parent POM”,这是使用了导入方式的一种解决方案。

3.1.2 Gradle安装

Spring Boot与Gradle 1.12或者更高的版本兼容。如果您还没有安装Gradle,可以去www.gradle.org/阅读相关教程。

Spring Boot依赖的grouporg.springframework.boot。一般情况下,您的项目可能需要为一个或多个“Starters”声明依赖项。Spring Boot提供了一些不错的Gradle插件,可以用来简化依赖声明和创建可执行的jar文件。

这是一个典型的build.gradle文件:

buildscript {
    repositories {
        jcenter()
        maven { url "http://repo.spring.io/snapshot" }
        maven { url "http://repo.spring.io/milestone" }
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.1.BUILD-SNAPSHOT")
    }
}

apply plugin: 'java'
apply plugin: 'spring-boot'

jar {
    baseName = 'myproject'
    version =  '0.0.1-SNAPSHOT'
}

repositories {
    jcenter()
    maven { url "http://repo.spring.io/snapshot" }
    maven { url "http://repo.spring.io/milestone" }
}

dependencies {
    compile("org.springframework.boot:spring-boot-starter-web")
    testCompile("org.springframework.boot:spring-boot-starter-test")
}

3.2 安装Spring Boot CLI

Spring Boot CLI是一个命令行工具,如果想要快速获取一个Spring样品程序,可以使用到它。Spring Boot CLI是一个命令行工具,如果想要快速获取一个Spring样品程序,可以使用到它。有了它,您可以运行Groovy脚本,这意味着您可以使用熟练的类Java语法,而不是超多的样板代码。

使用CLI这个命令行工具来做Spring Boot开发并不是必须的,但它确实是一个开发Spring应用程序最快捷的方式。

3.2.1 手动安装

到Spring软件仓库下载Spring CLI的发布包:

也可以去snapshot distributions下载最新的快照发布版本。

下载以后,阅读一下解压缩包里面的说明文档:INSTALL.txt。大概是这样,bin/目录下的.zip文件里面有一个spring脚本(Windows系统是spring.bat),或者您也可以使用命令java -jar来运行.jar文件(脚本是帮您确保classpath是否设置正确了)。

3.2.2 使用SDKMAN!安装

SDKMAN!(一个软件开发工具管理器)可以用用来管理多版本的二进制SDKs,包括 Groovy 与 Spring Boot CLI。到sdkman.io下载SDKMAN!,用下面的方式来安装Spring Boot:

$ sdk install springboot
$ spring --version
Spring Boot v1.4.1.BUILD-SNAPSHOT

如果您正在开发一些命令行工具CLI的组件,并且想要方便的使用到您刚刚构建的版本,下面这个介绍可以帮到您。

$ sdk install springboot dev /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-1.4.1.BUILD-SNAPSHOT-bin/spring-1.4.1.BUILD-SNAPSHOT/
$ sdk default springboot dev
$ spring --version
Spring CLI v1.4.1.BUILD-SNAPSHOT

这样做可以安装一个被叫做dev实例的本地spring实例,它指向了您的目标生成路径,所以每次您重新构建Spring Boot,spring都会是保持最新版本。

应该可以看到下面的这些输出信息:

$ sdk ls springboot

================================================================================
Available Springboot Versions
================================================================================
> + dev
* 1.4.1.BUILD-SNAPSHOT

================================================================================
+ - local version
* - installed
> - currently in use
================================================================================

3.2.3 OSX Homebrew 安装

如果您在Mac环境下,并且使用Homebrew,运行下面的命令来安装Spring Boot CLI:

$ brew tap pivotal/tap
$ brew install springboot

Homebrew把`spring`安装到了/usr/local/bin

[Note] Note
如果没有顺利安装的话,大概是您的brew库已经太旧了,执行brew update以后,再试一试。

3.2.4 MacPorts安装

如果您在Mac环境下,并且使用MacPorts,运行下面的命令来安装Spring Boot CLI:

$ sudo port install spring-boot-cli

3.2.5 命令行补全工具

Spring Boot CLI附带了一些脚本,这些脚本为BASHzsh提供了命令行补全功能。在任何shell里面都可以source到这些脚本(也叫spring),也可以初始化到个人或者系统级别的命令行工具里面。在Debian系统里面,系统级别的脚本在这个路径:/shell-completion/bash,shell程序启动以后,这里面的所有脚本都可以执行。例如,您已经使用SDKMAN!安装了这些脚本,为了手动执行他们,可以这样操作:

$ . ~/.sdkman/candidates/springboot/current/shell-completion/bash/spring
$ spring <HIT TAB HERE>
  grab  help  jar  run  test  version
[Note] Note
如果您使用Homebrew或者MacPorts安装了Spring Boot CLI,这些命令行补全脚本已经自动注入到了您的shell程序里面。

3.2.6 快速开始Spring CLI实例

这是一个极其简单的Web应用程序,可以用来验证您的安装是否正确。新建一个文件,文件名是app.groovy

@RestController
class ThisWillActuallyRun {

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

}

然后简单运行一下这个命令:

$ spring run app.groovy
[Note] Note
第一次运行这个应用程序,要下载一些依赖项目,将会耗费一些时间。以后再运行的话就会快很多了。

打开您的浏览器访问localhost:8080,应该可以得到下面的内容:

Hello World!

3.3 升级旧版本的Spring Boot

如果想要从旧版本的Spring Boot升级,检查一下存放在这里project wiki 的 “release notes”。您可以找到升级信息与每个版本的“新的和值得关注的”功能列表以及说明。

使用相关的包管理工具升级您已经使用命令行安装过的早期版本(比如,brew upgrade),另外,如果您是手动安装的CLI,阅读这个标准说明,同时记得更新环境变量PATH的值,以便移除旧版本的引用。

4. 开发第一个Spring Boot应用程序

用Java语言开发一个简单的Web应用程序“Hello World!”,我们将会特别提到一些Spring Boot关键特性。就用Maven来构建这个项目,因为很多IDE都支持Maven。

[Tip] Tip
这个网站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)
$ 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
[Note] Note
这个实例创建在自己的目录中。接下来内容假定您已经创建好了恰当的目录,这个目录叫“当前目录”。

4.1 创建POM

我们从创建一个Mavenpom.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.4.1.BUILD-SNAPSHOT</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>http://repo.spring.io/snapshot</url>
            <snapshots><enabled>true</enabled></snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </pluginRepository>
    </pluginRepositories>
</project>

像这样,应该可以进行构建工作了,运行一下命令mvn package看看输出信息(现在暂时忽略这个警告信息“jar will be empty – no content was marked for inclusion!”)。

[Note] Note
现在您也可以把这个项目导入进入一个IDE了(大多数的现代JAVA IDE内置了Maven)。为了方便,我们继续使用纯文本编辑器来开发这个例子。

4.2 添加classpath依赖

Spring Boot提供了一些“Starters”,让您方便把jar文件添加到您的classpath。我们的实例已经在POM文件的parent部分添加了
spring-boot-starter-parentspring-boot-starter-parent是一个添加了一些默认Maven配置的特殊的starter。也添加了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本身并没有引入任何依赖。编辑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。

4.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);
    }

}

虽然代码量不多,不多其实内容很丰富。我们逐步理解一下关键步骤。

4.3.1 @RestController和@RequestMapping注解

Example类的第一个注解是@RestController。这叫做构造型注解。它提示我们,对Spring来说,这个类扮演了特殊的角色,现在,这个类是一个Web控制器,Spring将会使用它来处理Web请求。

@RequestMapping注解展示了 “routing”信息。它告知Spring路径为“/”的HTTP请求都会映射到home方法。@RestController告知Spring直接将结果字符串返回给请求方。

[Tip] Tip
@RestController@RequestMapping注解属于 Spring MVC(它们不属于Spring Boot).更多资料,可以查看Spring参考文档的MVC 部分

4.3.2 @EnableAutoConfiguration注解

第二个类级别的注解是@EnableAutoConfiguration。 这个注解告知Spring Boot自己 “判断”您是如何配置Spring的,这基于您添加的依赖项。因为依赖项spring-boot-starter-web添加了Tomcat和Spring MVC,所以@EnableAutoConfiguration注解会判断您是在开发Web应用程序并且引入了Spring。

4.3.3 “main”方法

应用程序的最后一部分是main方法。这只是Java规范的一个标准的应用程序入口方法。我们的main方法委托了SpringApplication类去调用run方法完成这个功能。SpringApplication会启动我们的应用程序,启动Spring去开启自配置的Tomcat Web服务器。我们需要把Example.class作为参数传送到run方法,告知SpringApplication这是一个主要是的Spring组件。args字符串数组也传入了,以处理命令行提供的参数。

4.4 运行这个例子

现在我们的程序应该可以工作了。因为我们在POM文件里面使用了spring-boot-starter-parent,所以我们可以使用run指令来启动应用程序了。在项目根目录输入mvn spring-boot:run启动应用程序:

$ mvn spring-boot:run

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v1.4.1.BUILD-SNAPSHOT)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.222 seconds (JVM running for 6.514)

打开浏览器访问localhost:8080,您应该可以看到输出了下面的内容:

Hello World!

敲击ctrl-c就能退出程序了。

4.5 创建可执行jar文件

就像生产一个真正的软件产品,我们创建一个完整自足的可执行jar文件,把我们的第一个实例完成。可执行的jar文件(有时候我们也叫“富jar文件”)是一个归档文件,包含了编译好的类文件与我们运行程序所需要的所有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>
[Note] Note
spring-boot-starter-parentPOM包含绑定到repackage目标的<executions>配置。如果不使用parentPOM,你需要自己声明该配置,具体参考插件文档

保存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.4.1.BUILD-SNAPSHOT:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

如果查看target目录,你应该可以看到myproject-0.0.1-SNAPSHOT.jar,该文件大概有10Mb。想查看内部结构,可以运行jar tvf

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

在该目录下,你应该还能看到一个很小的名为myproject-0.0.1-SNAPSHOT.jar.original的文件, 这是在Spring Boot重新打包前,Maven创建的原始jar文件。

使用java -jar命令运行该程序:

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

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v1.4.1.BUILD-SNAPSHOT)
....... . . .
....... . . . (log output here)
....... . . .
........ Started Example in 2.536 seconds (JVM running for 2.864)

正如刚才一样,敲击ctrl-c退出应用。

5. 接下来阅读什么

希望本章的内容已经让您理解了部分Spring Boot的基础知识,并且掌握了以您的方式开发应用程序的方法。如果您面向任务的类型的开发人员,您可能想要直接跳到spring.io,查阅一些解决“怎样和Spring一起工作”这个问题的入门教程。我们也有一些Spring Boot定制的怎么做的参看文档。

Spring Boot仓库也可以运行的一些例子。这些例子和其他代码无关的(也就是说您不需要构建其他的代码就能运行或者使用这些例子)。

另外,按照顺序,接下来的内容是Part III, “Using Spring Boot”.。如果您真的缺乏耐心,可以继续往前,阅读Spring Boot特性

 

原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《Spring Boot官方指南》(二)入门

  • Trackback 关闭
  • 评论 (0)
  1. 暂无评论

return top