赵走x博客
网站访问量:151455
首页
书籍
软件
工具
古诗词
搜索
登录
11、测试运行中的应用程序
10、测试 Web 应用程序
9、集成测试自动配置
8、定制应用程序错误页面
7、通过属性文件外置配置
6、覆盖 Spring Boot 自动配置
5、使用自动配置
4、使用起步依赖
3、运用 Spring Boot
2、Spring Boot 入门
1、Spring 风云再起
2、Spring Boot 入门
资源编号:76572
Java
Spring Boot实战
热度:110
从根本上来说,Spring Boot的项目只是普通的Spring项目,只是它们正好用到了Spring Boot 的起步依赖和自动配置而已。因此,那些你早已熟悉的从头创建Spring项目的技术或工具,都能 用于Spring Boot项目。然而,还是有一些简便的途径可以用来开启一个新的Spring Boot项目。 最快的方法就是安装Spring Boot CLI,安装后就可以开始写代码,如代码清单1-1,接着通过 CLI来运行就好。 # 1.2.1 安装 Spring Boot CLI 如前文所述,Spring Boot CLI提供了一种有趣的、不同寻常的Spring应用程序开发方式。第5 章里会详细解释CLI提供的功能。这里先来看看如何安装Spring Boot CLI,这样才能运行代码清 单1-1。 Spring Boot CLI有好几种安装方式。 用下载的分发包进行安装。 用Groovy Environment Manager进行安装。 通过OS X Homebrew进行安装。 使用MacPorts进行安装。 我们分别看一下这几种方式。除此之外,还要了解如何安装Spring Boot CLI的命令行补全支持, 如果你在BASH或zsh shell里使用CLI,这会非常有用(抱歉了,各位Windows用户)。先来看看如 何用分发包手工安装Spring Boot CLI吧。 1. 手工安装Spring Boot CLI 安装Spring Boot CLI最直接的方法大约是下载、解压,随后将它的bin目录添加到系统路径里。 你可以从以下两个地址下载分发包: http://repo.spring.io/release/org/springframework/boot/spring-boot-cli/1.3.0.RELEASE/springboot-cli-1.3.0.RELEASE-bin.zip http://repo.spring.io/release/org/springframework/boot/spring-boot-cli/1.3.0.RELEASE/springboot-cli-1.3.0.RELEASE-bin.tar.gz 下载完成之后,把它解压到文件系统的任意目录里。在解压后的目录里,你会找到一个bin 目录,其中包含了一个spring.bat脚本(用于Windows环境)和一个spring脚本(用于Unix环境)。 把这个bin目录添加到系统路径里,然后就能使用Spring Boot CLI了。 >为Spring Boot建立符号链接:如果是在安装了Unix的机器上使用Spring Boot CLI, 最好建立一个指向解压目录的符号链接,然后把这个符号链接添加到系统路径,而不是 实际的目录。这样后续升级Spring Boot新版本,或是转换版本,都会很方便,只要重建 一下符号链接,指向新版本就好了。 你可以先浅尝辄止,看看你所安装的CLI版本号: ``` $ spring --version ``` 如果一切正常,你会看到安装好的Spring Boot CLI的版本号。 虽然这是手工安装,但一切都很容易,而且不要求你安装任何附加的东西。如果你是Windows 用户,也别无选择,这是唯一的安装方式。但如果你使用的是Unix机器,而且想要稍微自动化一 点的方式,那么可以试试Software Development Kit Manager。 2. 使用Software Development Kit Manager进行安装 软件开发工具管理包(Software Development Kit Manager,SDKMAN,曾用简称GVM)也能用来安装和管理多版本Spring Boot CLI。 使用前, 你需要先从http://sdkman.io获取并安装 SDKMAN。最简单的安装方式是使用命令行: ``` $ curl -s get.sdkman.io | bash ``` 跟随输出的指示就能完成SDKMAN的安装。在我的机器上,我在命令行里执行了如下命令: ``` $ source "/Users/habuma/.sdkman/bin/sdkman-init.sh" ``` 注意,用户不同,这条命令也会有所不同。我的用户目录是/Users/habuma,因此这也是shell 脚本的根路径。你需要根据实际情况稍作调整。一旦安装好了SDKMAN,就可以用下面的方式 来安装Spring Boot CLI了: ``` $ sdk install springboot $ spring --version ``` 假设一切正常,你将看到Spring Boot的当前版本号。 如果想升级新版本的Spring Boot CLI,只需安装并使用即可。使用SDKMAN的list命令可 以找到可用的版本: ``` $ sdk list springboot ``` list命令列出了所有可用版本,包括已经安装的和正在使用的。从中选择一个进行安装,然后 就可以正常使用。举例来说,要安装Spring Boot CLI 1.3.0.RELEASE,直接使用install命令, 指定版本号: ``` $ sdk install springboot 1.3.0.RELEASE ``` 这样就会安装一个新版本,随后你会被询问是否将其设置为默认版本。要是你不想把它作为默认 版本,或者想要切换到另一个版本,可以用use命令: ``` $ sdk use springboot 1.3.0.RELEASE ``` 如果你希望把那个版本作为所有shell的默认版本,可以使用default命令: ``` $ sdk default springboot 1.3.0.RELEASE ``` 使用SDKMAN来管理Spring Boot CLI有一个好处,你可以便捷地在Spring Boot的不同版本之 间切换。这样你可以在正式发布前试用快照版本(snapshot)、里程碑版本(milestone)和尚未正 式发布的候选版本(release candidate),试用后再切回稳定版本进行其他工作。 3. 使用Homebrew进行安装 如果要在OS X的机器上进行开发,你还可以用Homebrew来安装Spring Boot CLI。Homebrew 是OS X的包管理器,用于安装多种不同应用程序和工具。要安装Homebrew,最简单的方法就是 运行安装用的Ruby脚本: ``` ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/ master/install)" ``` 你可以在http://brew.sh看到更多关于Homebrew的内容(还有安装方法)。 要用Homebrew来安装Spring Boot CLI,你需要引入Pivotal的tap ① : ``` $ brew tap pivotal/tap ``` 在有了Pivotal的tap后,就可以像下面这样安装Spring Boot CLI了: ``` $ brew install springboot ``` Homebrew会把Spring Boot CLI安装到/usr/local/bin,之后可以直接使用。可以通过检查版本 号来验证安装是否成功: ``` $ spring --version ``` 这条命令应该会返回刚才安装的Spring Boot版本号。你也可以运行代码清单1-1看看。 4. 使用MacPorts进行安装 OS X用户还有另一种安装Spring Boot CLI的方法,即使用MacPorts,这是Mac OS X上另一个 流行的安装工具。要使用MacPorts来安装Spring Boot CLI,必须先安装MacPorts,而MacPorts还 要求安装Xcode。此外,使用不同版本的OS X时,MacPorts的安装步骤也会有所不同。因此我建 议你根据https://www.macports.org/install.php的安装指南来安装MacPorts。 一旦安装好了MacPorts,就可以用以下命令来安装Spring Boot CLI了: ``` $ sudo port install spring-boot-cli ``` MacPorts会把Spring Boot CLI安装到/opt/local/share/java/spring-boot-cli,并在/opt/local/bin里 放一个指向其可执行文件的符号链接。在安装MacPorts后,/opt/local/bin这个目录应该就在系统路 径里了。你可以检查版本号来验证安装是否成功: ``` $ spring --version ``` 这条命令应该会返回刚才安装的Spring Boot的版本号。你也可以运行代码清单1-1,看看效 果如何。 5. 开启命令行补全 Spring Boot CLI为基于CLI的应用程序的运行、打包和测试提供了一套好用的命令。而且,每 个命令都有好多选项。要记住这些东西实属不易,命令行补全能帮助记忆怎么使用Spring Boot CLI。 如果用Homebrew安装Spring Boot CLI,那么命令行补全已经安装完毕。但如果是手工安装或 者用SDKMAN安装的, 那就需要执行脚本或者手工安装。(如果是通过MacPorts安装的Spring Boot CLI,那么你不必考虑命令行补全。) 你可以在Spring Boot CLI安装目录的shell-completion子目录里找到补全脚本。有两个不同的 脚本,一个是针对BASH的,另一个是针对zsh的。要使用BASH的补全脚本,可以在命令行里键 入以下命令(假设安装时用的是SDKMAN): ``` $ . ~/.sdkman/springboot/current/shell-completion/bash/spring ``` >① tap是向Homebrew添加额外仓库的一种途径。Pivotal是Spring及Spring Boot背后的公司,通过它的tap可以安装Spring Boot。 这样,在当前的shell里就可以使用Spring Boot CLI的补全功能了,但每次开启一个新的shell 都要重新执行一次上面的命令才行。你也可以把这个脚本复制到你的个人或系统脚本目录里,这 个目录的位置在不同的Unix里也会有所不同,可以参考系统文档(或Google)了解细节。 开启了命令行补全之后,在命令行里键入spring命令,然后按Tab键就能看到下一步该输什 么的提示。选中一个命令后,键入--(两个连字符)后再按Tab,就会显示出该命令的选项列表。 如果你在Windows上进行开发,或者没有用BASH或zsh,那就无缘使用这些命令行补全脚本 了。尽管如此,如果你用的是Spring Boot CLI的shell,那一样也有命令补全: ``` $ spring shell ``` 和BASH、zsh的命令补全脚本(在BASH/zsh shell里执行的)不同,Spring Boot CLI shell会 新开一个特别针对Spring Boot的shell,在里面可以执行各种CLI命令,Tab键也能有命令补全。 Spring Boot CLI为Spring Boot提供了快速上手和构建简单原型应用程序的途径。稍后将在第8 章中讲到,在正确的生产运行时环境下,它也能用于开发生产应用程序。 尽管如此,与大部分Java项目的开发相比,Spring Boot CLI的流程还是不太符合常规。通常 情况下,Java项目用Gradle或Maven这样的工具构建出WAR文件,再把这些文件部署到应用服务 器里。即便CLI模型让你感到不太舒服,你仍然可以在传统方式下充分利用大部分Spring Boot特 性。 ① Spring Initializr可以成为你万里长征的第一步。 # 1.2.2 使用 Spring Initializr 初始化 Spring Boot 项目 万事开头难,你需要设置一个目录结构存放各种项目内容,创建构建文件,并在其中加入各 种依赖。Spring Boot CLI消除了不少设置工作,但如果你更倾向于传统Java项目结构,那你应该 看看Spring Initializr。 Spring Initializr从本质上来说就是一个Web应用程序,它能为你生成Spring Boot项目结构。虽 然不能生成应用程序代码, 但它能为你提供一个基本的项目结构, 以及一个用于构建代码的 Maven或Gradle构建说明文件。你只需要写应用程序的代码就好了。 Spring Initializr有几种用法。 通过Web界面使用。 通过Spring Tool Suite使用。 通过IntelliJ IDEA使用。 使用Spring Boot CLI使用。 下面分别看看这几种用法,先从Web界面开始。 ### 1. 使用Spring Initializr的Web界面 要使用Spring Initializr,最直接的办法就是用浏览器打开http://start.spring.io,你应该能看到 类似图1-1的一个表单。 表单的头两个问题是,你想用Maven还是Gradle来构建项目,以及使用Spring Boot的哪个版 本。程序默认生成Maven项目,并使用Spring Boot的最新版本(非里程碑和快照版本),但你也可 以自由选择其他选项。 表单左侧要你指定项目的一些基本信息。最起码你要提供项目的Group和Artifact,但如果你 点击了“Switch to the full version”链接,还可以指定额外的信息,比如版本号和基础包名。这些 信息是用来生成Maven的pom.xml文件(或者Gradle的build.gradle文件)的。 Spring Initializr是生成空Spring项目的Web应用程序,可以视为开发过程的第一步  图1-1 表单右侧要你指定项目依赖,最简单的方法就是在文本框里键入依赖的名称。随着你的输入 会出现匹配依赖的列表,选中一个(或多个)依赖,选中的依赖就会加入项目。如果找不到你要 的依赖,点击“Switch to the full version”就能看到可用依赖的完整列表。 要是你瞄过一眼附录B,就会发现这里的依赖和Spring Boot起步依赖是对应的。实际上,在 这里选中依赖,就相当于告诉Initializr把对应的起步依赖加到项目的构建文件里。(第2章会进一 步讨论Spring Boot起步依赖。) 填完表单,选好依赖,点击“Generate Project”按钮,Spring Initializr就会为你生成一个项目。 浏览器将会以ZIP文件的形式(文件名取决于Artifact字段的内容)把这个项目下载下来。根据你的选择,ZIP文件的内容也会略有不同。不管怎样,ZIP文件都会包含一个极其基础的项目,让你 能着手使用Spring Boot开发应用程序。 举例来说,假设你在Spring Initializr里指定了如下信息。 Artifact:myapp 包名:myapp 类型:Gradle项目 依赖:Web和JPA 点击“Generate Project”,就能获得一个名为myapp.zip的ZIP文件。解压后的项目结构同图1-2 类似。  图1-2 Initializr创建的项目,提供了构建Spring Boot应用程序所需的基本内容 如你所见,项目里基本没有代码,除了几个空目录外,还包含了如下几样东西。 build.gradle:Gradle构建说明文件。如果选择Maven项目,这就会换成pom.xml。 Application.java:一个带有main()方法的类,用于引导启动应用程序。 ApplicationTests.java:一个空的JUnit测试类,它加载了一个使用Spring Boot自动 配置功能的Spring应用程序上下文。 application.properties:一个空的properties文件,你可以根据需要添加配置属性。 在Spring Boot应用程序中,就连空目录都有自己的意义。static目录放置的是Web应用程序的 静态内容(JavaScript、样式表、图片,等等)。还有,稍后你将看到,用于呈现模型数据的模板 会放在templates目录里。 你很可能会把Initializr生成的项目导入IDE。如果你用的IDE是Spring Tool Suite,则可以直接 在IDE里创建项目。下面来看看Spring Tool Suite是怎么创建Spring Boot项目的。 ### 2. 在Spring Tool Suite里创建Spring Boot项目 长久以来,Spring Tool Suite ① 一直都是开发Spring应用程序的不二之选。从3.4.0版本开始, 它就集成了Spring Initializr,这让它成为开始上手Spring Boot的好方法。 >① Spring Tool Suite是Eclipse IDE的一个发行版,增加了诸多能辅助Spring开发的特性。你可以从http://spring.io/tools/sts下载Spring Tool Suite。 要在Spring Tool Suite里创建新的Spring Boot应用程序,在File菜单里选中New > Spring Starter Project菜单项,随后Spring Tool Suite会显示一个与图1-3相仿的对话框。 如你所见,这个对话框要求填写的信息和Spring Initializr的Web界面里是一样的。事实上, 你在这里提供的数据会被发送给Spring Initializr,用于创建项目ZIP文件,这和使用Web表单是 一样的。  图1-3 Spring Tool Suite集成了Spring Initializr, 可以在IDE里创建并直接导入Spring Boot项目 如果你想在文件系统上指定项目创建的位置,或者把它加入IDE里的特定工作集,就点击Next 按钮。你会看到第二个对话框,如图1-4所示。 Location指定了文件系统上项目的存放位置。如果你使用Eclipse的工作集来组织项目,那么 也可以勾上Add Project to Working Sets这个复选框,选择一个工作集,这样就能把项目加入指定 的工作集了。 Site Info部分简单描述了将要用来访问Initializr的URL,大多数情况下你都可以忽略这部分内 容。然而,如果要部署自己的Initializr服务器(从https://github.com/spring-io/initializr复制代码即 可),你可以在这里设置Initializr基础URL。 点击Finish按钮后,项目的生成和导入过程就开始了。你必须认识到一点,Spring Tool Suite 的Spring Starter Project对话框, 其实是把项目生成的工作委托给http://start.spring.io上的Spring Initializr来做的,因此必须联网才能使用这一功能。  图1-4 Spring Starter Project对话框的第2页可以让你指定在哪里创建项目 一旦把项目导入工作空间,应用程序就可以开发了。在开发的过程中,你会发现Spring Tool Suite针对Spring Boot还有一些锦上添花的功能。比如,可以在Run菜单里选中Run As > Spring Boot Application,在嵌入式服务器里运行你的应用程序。 注意,Spring Tool Suite是通过REST API与Initializr交互的,因此只有连上Initializr它才能正常 工作。如果你的开发机离线,或者Initializr被防火墙阻断了,那么Spring Tool Suite的Spring Starter Project向导是无法使用的。 ### 3. 在IntelliJ IDEA里创建Spring Boot项目 ① IntelliJ IDEA是非常流行的IDE,IntelliJ IDEA 14.1已经支持Spring Boot了! 要在IntelliJ IDEA里创建新的Spring Boot应用程序,在File菜单里选择New > Project。你会看 到几屏内容(图1-5是第一屏),Initializr的Web应用程序以及Spring Tool Suite类似。 在首先显示的这一屏中, 在左侧项目选择里选中Spring Initializr, 随后会提示你选择一个 Project SDK(基本上就是这个项目要用的Java SDK),同时选择Initializr Web服务的位置。除非你 在使用自己的Initializr,否则应该不做任何修改直接点Next按钮,之后就到了图1-6。 >① 你可以从https://www.jetbrains.com/idea/获取IntelliJ IDEA。它是一款商业IDE,这意味着你需要付费使用。但是你可以下载试用版,它对开源项目免费。  图1-5 IntelliJ IDEA里Spring Boot初始化向导的第一屏  图1-6 在IntelliJ IDEA的Spring Boot初始化向导里指定项目信息 Spring Boot初始化向导的第二屏要求你提供项目的一些基本信息,比如项目名称、Maven Group和Artifact、Java版本,以及你是想用Maven还是Gradle来构建项目。描述好项目信息之后, 点击Next按钮就能看到第三屏了,如图1-7所示。  图1-7 在IntelliJ IDEA的Spring Boot初始化向导里选择项目依赖 第二屏向你询问项目的基本信息,第三屏就开始问你要往项目里添加什么依赖了。和之前一 样,屏幕里的复选框和Spring Boot起步依赖是对应的。选完之后点击Next就到了向导的最后一屏, 如图1-8所示。  图1-8 IntelliJ IDEA的Spring Boot初始化向导的最后一屏 最后一屏问你项目叫什么名字,还有要在哪里创建项目。一切准备就绪之后,点击Finish按 钮,就能在IDE里得到一个空的Spring Boot项目了。 ### 4. 在Spring Boot CLI里使用Initializr 如前文所述,如果你想仅仅写代码就完成Spring应用程序的开发,那么Spring Boot CLI是个 不错的选择。然而,Spring Boot CLI的功能还不限于此,它有一些命令可以帮你使用Initializr,通 过它上手开发更传统的Java项目。 Spring Boot CLI包含了一个init命令,可以作为Initializr的客户端界面。init命令最简单的 用法就是创建Spring Boot项目的基线: ``` $ spring init ``` 在和Initializr的Web应用程序通信后,init命令会下载一个demo.zip文件。解压后你会看到 一个典型的项目结构,包含一个Maven的pom.xml构建描述文件。Maven的构建说明只包含最基本 的内容,即只有Spring Boot基线和测试起步依赖。你可能会想要更多的东西。 假设你想要构建一个Web应用程序,其中使用JPA实现数据持久化,使用Spring Security进行 安全加固,可以用--dependencies或-d来指定那些初始依赖: ``` $ spring init -dweb,jpa,security ``` 这条命令会下载一个demo.zip文件, 包含与之前一样的项目结构, 但在pom.xml里增加了 Spring Boot的Web、jpa和security起步依赖。请注意,在-d和依赖之间不能加空格,否则就变成 了下载一个ZIP文件,文件名是web,jpa,security。 现在,假设你想用Gradle来构建项目。没问题,用--build参数将Gradle指定为构建类型: ``` $ spring init -dweb,jpa,security --build gradle ``` 默认情况下,无论是Maven还是Gradle的构建说明都会产生一个可执行JAR文件。但如果你 想要一个WAR文件,那么可以通过--packaging或者-p参数进行说明: ``` $ spring init -dweb,jpa,security --build gradle -p war ``` 到目前为止,init命令只用来下载ZIP文件。如果你想让CLI帮你解压那个ZIP文件,可以指 定一个用于解压的目录: ``` $ spring init -dweb,jpa,security --build gradle -p war myapp ``` 此处的最后一个参数说明你希望把项目解压到myapp目录里去。 此外,如果你希望CLI把生成的项目解压到当前目录,可以使用--extract或者-x参数: ``` $ spring init -dweb,jpa,security --build gradle -p jar -x ``` init命令还有不少其他参数,包括基于Groovy构建项目的参数、指定用Java版本编译的参数, 还有选择构建依赖的Spring Boot版本的参数。可以通过help命令了解所有参数的情况: ``` $ spring help init ``` 你也可以查看那些参数都有哪些可选项,为init命令带上--list或-l参数就可以了: ``` $ spring init -l ``` 你一定注意到了,尽管spring init –l列出了一些Initializr支持的参数,但并非所有参数 都能直接为Spring Boot CLI的init命令所支持。举例来说,用CLI初始化项目时,你不能指定根 包的名字,它默认为demo。spring help init会告诉你CLI的init命令都支持哪些参数。 无论你是用Initializr的Web界面,在Spring Tool Suite里创建项目,还是用Spring Boot CLI来初 始化项目,Spring Boot Initializr创建出来的项目都有相似的项目布局,和你之前开发过的Java项 目没什么不同。 # 1.3 小结 Spring Boot为Spring应用程序的开发提供了一种激动人心的新方式,框架本身带来的阻力很 小。自动配置消除了传统Spring应用程序里的很多样板配置;Spring Boot起步依赖让你能通过库 所提供的功能而非名称与版本号来指定构建依赖;Spring Boot CLI将Spring Boot的无阻碍开发模 型提升到了一个崭新的高度,在命令行里就能简单快速地用Groovy进行开发;Actuator让你能深 入运行中的应用程序,了解Spring Boot做了什么,是怎么做的。 本章大致概括了Spring Boot的功能。你大概已经跃跃欲试,想用Spring Boot来写个真实的应 用程序了吧。这正是我们在下一章里要做的事情。有了Spring Boot提供的诸多功能,最困难的不 过是把书翻到第2章。