SpringBoot2.x参考指南(中文版) 第二部分 开始入门

来源:互联网 发布:mysql 高并发解决方案 编辑:程序博客网 时间:2024/05/21 09:48

转载请注明出处:http://blog.csdn.net/hitliuxiaodong/article/details/53259797 
本人水平有限,翻译中的错误还请多多指教 
 如果你第一次使用SpringBoot或者刚接触Spring,这部分就是为你准备哒。在这里我们将回答:是什么?为什么?怎么做?三个基本的问题。随着SpringBoot的安装,你将对SpringBoot有一个基本的印象。我们接下来将开始构建我们第一个SpringBoot项目,也会讨论一下核心准则。 
  
 8.SpringBoot的介绍 
  
 SpringBoot使得构建可以直接运行的独立、可发布的Spring项目变得非常容易。我们将Spring库和其他第三方库整合进来,使你可以没有很多疑惑的开始构建项目。大部分SpringBoot项目需要很少的Spring配置就够了。 
 你可以使用SpringBoot构建通过java -jar运行的java项目,也可以构建相对传统的war项目。我们也提供了一个命令行工具以便运行”Spring脚本” 
 我们的初级目标是:

  • 提供一个从根本上快速简洁的Spring开发体验
  • 提供诸多非必须的但是在大型的项目中很常见的功能(比如:整合的服务器,安全等)
  • 无须生成代码和xml配置

    9.系统要求 
    默认情况下,SpringBoot2.0.0.Build-SnapShot需要java7和SpringFramework5.0.0Build-Snapshot或者更高的版本。你也可以使用java6,不过需要一些额外的配置。请看第 Section 80.11。构建工具需要Maven(3.2+)或者Gradle2(2.9+)。Gradle3不提供支持。

    尽管你可以使用java6或者java7,不过我们还是建议你尽可能的使用java8

    9.1 Servlet容器 
    下面的容器是SpringBoot内部整合的

NameServletVersionJava versionTomcat83.1java7+Tomcat73.0java6+Jetty9.33.1java8+Jetty9.23.1java7+Jetty83.1java6+Undertow 1.33.1java7+

你也可以在任何支持Servlet 3.0+的容器中部署SpringBoot项目

10.安装SpringBoot 
SpringBoot可以使用传统的Java开发工具或者命令行工具。但是无论如何你需要使用java1.6或者更高版本。你可以使用以下命令检查java版本 
$java -version 
如果你是一枚Java开发新手,或者你只是想体验一下SpringBoot,你可以尝试使用 SpringBootCLI 工具,或者阅读一下安装指南。

尽管SpringBoot可以在java1.6上运行良好,如果可能的话还是要用Java的最新版本

10.SpringBoot安装指南

你可以像使用传统的Java库一样使用SpringBoot,也就是把sping-boot-*.jar放到你的classpath中。SpringBoot不需要额外的插件整合,因此你可以使用任何IDE或者文本编辑器。另外SpringBoot项目和普通的java项目没有什么区别,因此你可以向运行调试普通java项目一样运行调试SpringBoot项目。

尽管你可以只把jar包拷贝到构建路径,不过我们还是强烈建议你使用构建工具(比如Maven或者Gradle)

10.1.1 Maven配置 
SpringBoot可以和ApacheMaven3.2及以上版本正常工作。如果你没有安装Maven,可以参考 教程

在大多数操作系统上,可以通过包管理工具安装Maven。如果你是 OSx系统,可以使用 brew install mavenUbuntu系统可以使用 sudo apt-get install maven

SpringBoot的依赖使用 org.springframework.boot groupId。一个典型的SpringBoot项目的pom需要继承 spring-boot-starter-parent 依赖于 一个或者多个 “Starters”.SpringBoot也提供 Maven plugin 来创建可执行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>    <!-- Inherit defaults from Spring Boot -->    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.0.0.BUILD-SNAPSHOT</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>    <!-- Add Spring repositories -->    <!-- (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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58

使用SpringBoot的最好方法是 继承 spring-boot-starter-parent,不过有时候并不合适。有时需要使用继承自其他 父 pom ,或者不想使用默认的设置。这时候 请看下面 的教程

10.1.2 Gradle配置

SpringBoot兼容Gradle2(2.9+).推荐 Gradle2.14.1,Gradle3是不支持的。如果你没有安装Gradle,请参照Gradle官方安装教程www.gradle.org

SpringBoot的依赖需要用 org.springframework.boot groupId。你的项目可能需要声明一个或者多个 “Starters”的依赖。SpringBoot也提供了一个插件Gradle plugin供生成可执行的jar包

Gradle WrapperGradleWrapper提供一个很简洁的方法来生成一个项目。它包含一些脚本和一些库以供启动构建线程。详情请见 https://docs.gradle.org/2.14.1/userguide/gradle_wrapper.html
  • 1
  • 2

下面是一个典型的 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:2.0.0.BUILD-SNAPSHOT")    }}apply plugin: 'java'apply plugin: 'org.springframework.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")}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

10.2 安装 SpringBootCLI 工具 
SpringBootCLI是一个命令行工具,使用该工具可以快速体验Spring的原型,它允许你运行 Groovy 脚本,意味着你可以使用java相似的语法

你工作时无需使用 SpringBootCLI ,不过它定义了一种新的快速构建Spring项目的方法

10.2.1 安装手册

你可以从下面两个分支下载 Sping-boot-cli

  • spring-boot-cli-2.0.0.BUILD-SNAPSHOT-bin.zip
  • spring-boot-cli-2.0.0.BUILD-SNAPSHOT-bin.tar.gz

下载完成后,就可以按照压缩包中的 INSTALL.txt 中的步骤进行安装。

10.2.2 安装 SDKMAN! 
SDKMAN! (The Software Development Kit Manager) 可以用来管理多个 不同的 SDK,包括 Groovy 和 SpringBootCLI.可以从 sdkman.io 进行下载,然后执行下面的命令进行安装

$ sdk install springboot$ spring --versionSpring Boot v2.0.0.BUILD-SNAPSHOT
  • 1
  • 2
  • 3

如果你想为CLI 增强功能,想更快的使用你编译的版本,你可以使用如下的方法:

$ sdk install springboot dev /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-2.0.0.BUILD-SNAPSHOT-bin/spring-2.0.0.BUILD-SNAPSHOT/$ sdk default springboot dev$ spring --versionSpring CLI v2.0.0.BUILD-SNAPSHOT
  • 1
  • 2
  • 3
  • 4

这样就会安装一个叫做 dev 的实例,它指向你编译的位置,这样每次重新编译SpringBoot,Spring都会是最新的。 
你可以使用如下命令查看

$ sdk ls springboot================================================================================Available Springboot Versions================================================================================> + dev* 2.0.0.BUILD-SNAPSHOT================================================================================+ - local version* - installed> - currently in use================================================================================
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

10.2.3 OSX Homebrew 安装

如果你正在使用 MAC 并且在使用 Homebrew,那么你执行如下命令就可以安装SpringBootCLI:

$ brew tap pivotal/tap$ brew install springboot
  • 1
  • 2

Homebrew就会把 spring 安装到 usr/local/bin

如果你看不到这样的提示,可能是你的brew不够新,执行 brew update 进行更新,重试一下就好

10.2.4 MacPorts安装 
如果你正在使用mac,并且在使用 MacPorts,你只需要执行:

$ sudo port install spring-boot-cli
  • 1

10.2.5 命令行自动补全

SpringBootCLI 为 BASH 和 zsh shells提供有自动补全功能。你可以在任何 shell中使用,或者把放在个人或者系统自动补全字典里。在Debian系统里,system-wide scripts(这个我不太知道是什么意思)在 /shell-completion/bash,这里的脚本在新的shelli启动时都会执行。如果想手动执行,可以使用 SDKMAN!

$ . ~/.sdkman/candidates/springboot/current/shell-completion/bash/spring$ spring <HIT TAB HERE>  grab  help  jar  run  test  version
  • 1
  • 2
  • 3

如果你在使用Homebrew 或者 MacPorts,那么SpringBootCLI就会自动和Shell绑定。

10.2.6 一个SpringCLI的例子

下面是一个非常简单的Web项目,你可用它来测试是否安装成功。创建一个名称为 app.groovy 的文件:

@RestControllerclass ThisWillActuallyRun {    @RequestMapping("/")    String home() {        "Hello World!"    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

然后通过shell执行:

$ spring run app.groovy
  • 1

第一次执行可能会慢一点,因为需要下载相关的依赖库,下次就快了

在浏览器中 输入 localhost:8080 你就可以看到:

Hello World!
  • 1

10.3 从早期版本升级

如果你想从早期版本进行升级,请查看 project wiki 中的 “release notes”.你将在那里看到相关的升级指南

如果你想升级早期的 CLI工具,可以使用上面的包管理工具(比如:brew upgrade)。如果是手动安装的,请参照 指南 进行升级,记得更改环境变量。

11.开发第一个SpringBoot项目

让我们通过一个简单的 “hello world” 项目来看看 SpringBoot的一些动人的特点。我们将使用Maven来构建,因为大多数IDE都支持Maven。 
在开始之前,请打开一个终端,确保我们有正确的Java和Maven版本

$ java -versionjava 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)
  • 1
  • 2
  • 3
  • 4
$ mvn -vApache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-11T13:58:10-07:00)Maven home: /Users/user/tools/apache-maven-3.1.1Java version: 1.7.0_51, vendor: Oracle Corporation
  • 1
  • 2
  • 3
  • 4

本例子需要在一个单独的文件夹里。下面的流程默认你已经创建了一个合适的文件夹,并且是你的当前目录。

11.1 创建 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>2.0.0.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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

然后运行 mvn package ,可以忽略”jar will be empty - no content was marked for inclusion!”的提示

此时你可以把它导入你的常用IDE中。为了简单,我们还用文本编辑器

11.2 添加classpath依赖 
SpringBoot提供有许多的 “Starters” 来使构建变得简单。我们的例子已经在POM的 parent 中使用了 
spring-boot-starter-parent 。这个 spring-boot-starter-parent 是一个特殊的 starter 提供有maven的默认配置。它也提供有 dependency-management 模块 来省略 version 标签

其他的 “starters” 也提供有一些依赖以供你开发特殊的程序是使用。因为我们在开发一个 web项目,所有我们需要添加上 spring-boot-starter-web 依赖。但是在这之前,让我们看看现在已经拥有的依赖

$ mvn dependency:tree[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT
  • 1
  • 2
  • 3

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

如果你再运行mvn dependency:tree,就可以看到项目多了很多依赖,包括tomcat服务器和SpringBoot自身的依赖。

11.3写代码 
为了完成我们的项目,我们还需要创建一个java file。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@EnableAutoConfigurationpublic class Example {    @RequestMapping("/")    String home() {        return "Hello World!";    }    public static void main(String[] args) throws Exception {        SpringApplication.run(Example.class, args);    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

尽管这里没有多少代码,可是足够了。让我们看看接下来重要的部分。

11.3.1 @RestController 和 @RequestMapping 注释 
我们例子中的第一个注释是 @RestController。这个注释在Spring中有特殊的涵义,意味着这是一个控制器,因此Spring会用它来处理web请求。 
@RequestMapping 这个注释提供有路由信息。它告诉Spring 凡是请求路径为 “/”的Http请求都应该由 home 方法来处理。同时这个注释也告诉Spring 直接渲染结果的 string 给调用者。

@RestController和@RequestMapping是SpringMVC中的注释。可以通过 MVC section来了解更多信息

11.3.2 @EnableAutoConfiguration 注释 
第二个类级别的注释是 @EnableAutoConfiguration。这个注释告诉SpringBoot去猜测你想如何配置Spring,主要根据你添加的jar包。因为 spring-boot-starter-web添加有tomcat和SpringMVC,所以SpringBoot会认为你在开发一个web项目,并以此进行配置。

Starters and Auto-ConfigurationAuto-Configuration设计用来更好的和 "Starters" 协同工作。不过这两个概念并不直接相连。你可以自由选择jar包依赖,并且spring-boot仍然会很好的自动配置你的项目。
  • 1
  • 2

11.3.3 “main” 方法 
最后的部分是应用的main方法。这是标准的java程序入口方法。我们的主方法委托给SpringBoot的SpringApplication类的run方法。SpringApplication会启动我们的程序,启动自动配置的tomcat。我们需要把Example.class作为参数传递给SpringApplication。

11.4 运行实例

这时候我们的程序就可以工作了。因为我们配置了 spring-boot-starter-parent POM,我们就可以运行我们的程序了。在控制台输入 mvn spring-boot:run 来启动应用程序

$ mvn spring-boot:run  .   ____          _            __ _ _ /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/  ___)| |_)| | | | | || (_| |  ) ) ) )  '  |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot ::  (v2.0.0.BUILD-SNAPSHOT)....... . . ........ . . . (log output here)....... . . ......... Started Example in 2.222 seconds (JVM running for 6.514)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

此时我们就可以在浏览器中输入 localhost:8080 看到相关输出:

Hello World!
  • 1

可以通过 ctrl+c 实现优雅退出程序

11.5 生成可执行jar文件 
最后让我们通过生成可执行jar包来结束例子。可执行jar包中包含执行所需的所有类和依赖。

可执行jar包和javajava 本身没有提供一个标准的方法生成可执行jar。这会在我们分发应用时造成问题。为了解决这个问题,许多开发者使用 “uber” jars。“uber” jars只是把生成的类简单的打成一个压缩包。这样的问题是没法看到程序中应用了哪些类。这样还有一个问题,就是多个相同的文件名的文件(内容不同)被使用了SpringBoot采用不同的方法允许你直接打包
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

为了创建一个可执行的 jar 包,我们需要在 pom文件中添加 spring-boot-maven-plugin。

<build>    <plugins>        <plugin>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-maven-plugin</artifactId>        </plugin>    </plugins></build>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

spring-boot-starter-parent POM 包含 配置 来绑定打包。如果你没有使用给定的父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:2.0.0.BUILD-SNAPSHOT:repackage (default) @ myproject ---[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

如果你看 target目录 你就可以看到 myproject-0.0.1-SNAPSHOT.jar文件。这个文件大约10M。如果你想看文件内部,你就可以使用 jar tvf: 
$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar 
你也可以在target里看到一个相对小很多的文件,文件名为 myproject-0.0.1-SNAPSHOT.jar.original。这个原始文件是由SpringBoot打包前,由maven创建的。 
为了运行该应用,可以使用 java -jar命令:

$ java -jar target/myproject-0.0.1-SNAPSHOT.jar  .   ____          _            __ _ _ /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/  ___)| |_)| | | | | || (_| |  ) ) ) )  '  |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot ::  (v2.0.0.BUILD-SNAPSHOT)....... . . ........ . . . (log output here)....... . . ......... Started Example in 2.536 seconds (JVM running for 2.864)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

最后,可以通过ctrl+c 优雅退出

12.接下来 
本部分提供了一些SpringBoot的基础知识,也带领你开始写自己的程序。如果你是一个任务驱动型的开发者,你也许想跳到 http://spring.io 看看”Spring 能够做什么的问题 “’ 我们也提供有 SpringBoot How-to 的参考文档

Spring Boot repository中有一些例子可以学习。这些例子都是彼此独立的。

另外,接下来的步骤是阅读 第三部分 使用 SpringBoot.如果你实在没有耐心,你也可以调到前面阅读 Spring特点一章。

原创粉丝点击