《Spring Boot官方指南》(二)入门
- 如果您刚开始接触Spring Boot,或者简称’Spring’, 这个部分对您来说非常有用。这个部分提供了“是什么?”,“怎么做?”和 “为什么?”的解释。您除了会阅读一份附带Spring Boot安装说明的介绍,还会引导您创建第一个Spring Boot应用程序,顺便讲述一些核心原则。
1. Spring Boot简介
Spring Boot使创建基于Spring的应用程序变得轻松,您只需要做到“just run”就能创建一个独立的、产品级别的Spring应用程序。我们为Spring平台及第三方库提供了相对固定的搭配,所以您开始的时候会轻松很多。大部分的SpringBoot应用程序都只需要很少的Spring配置。
您可以使用SpringBoot创建应用程序,通过java -jar
命令或者传统的war包部署方式来启动它。我们也提供了一个命令行工具来运行“spring脚本”。
我们的目标是:
- 从根本上提供更加快速和简便的Spring开发体验。
- 开箱即用,但定制开发也很便捷。
- 提供一些大型项目常用的非功能性特性(例如:嵌入式服务、安全、监控、健康检查、外部配置)。
- 不用生成代码,没有xml配置。
一般情况下,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 | |
---|---|
虽然您可以在Java 6或者7下使用Spring Boot,但我们一般还是建议尽可能的使用Java 8。 |
Spring Boot可以和“经典的”Java开发工具一起使用,也可以安装成一个命令行工具。无论如何,您需要Java SDK v1.6或者更高的版本。开始之前,确认一下您的Java版本:
$ java -version
如果您是Java开发新手,或者您只是想体验一下Spring Boot,
第一步您可以选择去Spring Boot CLI 试一试。或者,继续看“经典的”安装介绍。
Tip | |
---|---|
虽然Spring Boot可以兼容Java 6,但是还是尽可能使用最新版本的Java。 |
您可以像使用其他标准Java库一样使用Spring Boot。只需要将相关的spring-boot-*.jar文件包含进您的classpath。Spring Boot不需要使用特殊的工具进行集成,因此您选择任何IDE或者文本编辑器都可以;并且Spring Boot应用程序也没有任何特殊规范,您可以像其他Java程序一样来运行和调试它。
虽然您可以复制Spring Boot jars,但是我们建议使用支持依赖管理的构建工具(比如Maven或者Gradle)。
Spring Boot与Apache Maven 3.2或者更高的版本兼容。如果您还没有安装Maven,可以去maven.apache.org阅读相关教程。
Tip | |
---|---|
很多操作系统可以使用包管理工具来安装Maven,苹果的OSX操作系统Homebrew使用者可以试试brew install maven 。Ubuntu用户可以运行这个命令sudo apt-get install maven 。 |
Spring Boot 依赖的groupId
是org.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 | |
---|---|
继承spring-boot-starter-parent 项目是不错的使用Spring Boot的方式,但是有时候可能还是有不适配的问题。有些时候您可能需要继承子不同的父POM,或者仅仅是和我们的默认配置有所区别。查看Section 13.2.2, “Using Spring Boot without the parent POM”,这是使用了导入方式的一种解决方案。 |
Spring Boot与Gradle 1.12或者更高的版本兼容。如果您还没有安装Gradle,可以去www.gradle.org/阅读相关教程。
Spring Boot依赖的group
是org.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") }
Spring Boot CLI是一个命令行工具,如果想要快速获取一个Spring样品程序,可以使用到它。Spring Boot CLI是一个命令行工具,如果想要快速获取一个Spring样品程序,可以使用到它。有了它,您可以运行Groovy脚本,这意味着您可以使用熟练的类Java语法,而不是超多的样板代码。
使用CLI这个命令行工具来做Spring Boot开发并不是必须的,但它确实是一个开发Spring应用程序最快捷的方式。
到Spring软件仓库下载Spring CLI的发布包:
也可以去snapshot distributions下载最新的快照发布版本。
下载以后,阅读一下解压缩包里面的说明文档:INSTALL.txt。大概是这样,bin/
目录下的.zip
文件里面有一个spring
脚本(Windows系统是spring.bat
),或者您也可以使用命令java -jar
来运行.jar
文件(脚本是帮您确保classpath是否设置正确了)。
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 ================================================================================
如果您在Mac环境下,并且使用Homebrew,运行下面的命令来安装Spring Boot CLI:
$ brew tap pivotal/tap $ brew install springboot
Homebrew把`spring`安装到了/usr/local/bin
。
Note | |
---|---|
如果没有顺利安装的话,大概是您的brew库已经太旧了,执行brew update 以后,再试一试。 |
如果您在Mac环境下,并且使用MacPorts,运行下面的命令来安装Spring Boot CLI:
$ sudo port install spring-boot-cli
Spring Boot CLI附带了一些脚本,这些脚本为BASH 和zsh提供了命令行补全功能。在任何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 | |
---|---|
如果您使用Homebrew或者MacPorts安装了Spring Boot CLI,这些命令行补全脚本已经自动注入到了您的shell程序里面。 |
这是一个极其简单的Web应用程序,可以用来验证您的安装是否正确。新建一个文件,文件名是app.groovy
:
@RestController class ThisWillActuallyRun { @RequestMapping("/") String home() { "Hello World!" } }
然后简单运行一下这个命令:
$ spring run app.groovy
Note | |
---|---|
第一次运行这个应用程序,要下载一些依赖项目,将会耗费一些时间。以后再运行的话就会快很多了。 |
打开您的浏览器访问localhost:8080,应该可以得到下面的内容:
Hello World!
如果想要从旧版本的Spring Boot升级,检查一下存放在这里project wiki 的 “release notes”。您可以找到升级信息与每个版本的“新的和值得关注的”功能列表以及说明。
使用相关的包管理工具升级您已经使用命令行安装过的早期版本(比如,brew upgrade
),另外,如果您是手动安装的CLI,阅读这个标准说明,同时记得更新环境变量PATH
的值,以便移除旧版本的引用。
用Java语言开发一个简单的Web应用程序“Hello World!”,我们将会特别提到一些Spring Boot关键特性。就用Maven来构建这个项目,因为很多IDE都支持Maven。
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 | |
---|---|
这个实例创建在自己的目录中。接下来内容假定您已经创建好了恰当的目录,这个目录叫“当前目录”。 |
我们从创建一个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 | |
---|---|
现在您也可以把这个项目导入进入一个IDE了(大多数的现代JAVA IDE内置了Maven)。为了方便,我们继续使用纯文本编辑器来开发这个例子。 |
Spring Boot提供了一些“Starters”,让您方便把jar文件添加到您的classpath。我们的实例已经在POM文件的parent
部分添加了
spring-boot-starter-parent
。spring-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。
需要编写一个简单的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); } }
虽然代码量不多,不多其实内容很丰富。我们逐步理解一下关键步骤。
Example
类的第一个注解是@RestController
。这叫做构造型注解。它提示我们,对Spring来说,这个类扮演了特殊的角色,现在,这个类是一个Web控制器
,Spring将会使用它来处理Web请求。
@RequestMapping
注解展示了 “routing”信息。它告知Spring路径为“/”的HTTP请求都会映射到home
方法。@RestController
告知Spring直接将结果字符串返回给请求方。
Tip | |
---|---|
@RestController 与@RequestMapping 注解属于 Spring MVC(它们不属于Spring Boot).更多资料,可以查看Spring参考文档的MVC 部分。 |
第二个类级别的注解是@EnableAutoConfiguration
。 这个注解告知Spring Boot自己 “判断”您是如何配置Spring的,这基于您添加的依赖项。因为依赖项spring-boot-starter-web
添加了Tomcat和Spring MVC,所以@EnableAutoConfiguration
注解会判断您是在开发Web应用程序并且引入了Spring。
现在我们的程序应该可以工作了。因为我们在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
就能退出程序了。
就像生产一个真正的软件产品,我们创建一个完整自足的可执行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 | |
---|---|
spring-boot-starter-parent POM包含绑定到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退出应用。
希望本章的内容已经让您理解了部分Spring Boot的基础知识,并且掌握了以您的方式开发应用程序的方法。如果您面向任务的类型的开发人员,您可能想要直接跳到spring.io,查阅一些解决“怎样和Spring一起工作”这个问题的入门教程。我们也有一些Spring Boot定制的怎么做的参看文档。
Spring Boot仓库也可以运行的一些例子。这些例子和其他代码无关的(也就是说您不需要构建其他的代码就能运行或者使用这些例子)。
另外,按照顺序,接下来的内容是Part III, “Using Spring Boot”.。如果您真的缺乏耐心,可以继续往前,阅读Spring Boot特性。
原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: 《Spring Boot官方指南》(二)入门
暂无评论