第一个Spring Boot项目
Spring Boot是目前流行的微服务框架,倡导“约定优先于配置”,其设计目的是用来简化新Spring应用的初始化搭建以及开发过程。SpringBoot提供了很多核心的功能,比如自动化配置、提供starter简化Maven配置、内嵌Servlet容器、应用监控等功能,让我们可以快速构建企业级应用程序。
本章主要介绍开始学习Spring Boot之前的环境准备,如何一分钟快速搭建Spring Boot,Spring Boot文件目录简单介绍,以及Maven Helper插件的安装和使用等内容。
1.Spring Boot开发环境准备(IDEA可为开发做全部的准备)
在开始学习Spring Boot之前,我们需要准备好开发环境。本节将以Windows操作系统为例,介绍如何安装JDK、Intellij IDEA及ApacheMaven。如果你的电脑上已经安装了JDK、Intellij IDEA或者ApacheMaven,可以跳过本节内容。
1.1 安装JDK(本处直接在IDEA中安装JDK,无需书中步骤)
JDK(Java SE Development Kit)建议使用1.8及以上的版本,其官方下载路径为:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html。大家可以根据自己Windows操作系统的配置选择合适的JDK1.8安装包,这里就不过多描述。
软件下载完成之后,双击下载软件,出现安装界面。一路单击【下一步】按钮即可完成安装。这里笔者把JDK安装在C:\ProgramFiles\Java\jdk1.8.0_77下。
安装完成后,需要配置环境变量JAVA_HOME,具体步骤如下:
在电脑桌面上,右击【我的电脑】→【属性】→【高级系统设置】→【环境变量】→【系统变量(S)】→【新建】出现新建环境变量的窗口。
在【变量名】和【变量值】中分别输入JAVA_HOME和C:\Program Files\Java\jdk1.8.0_77,单击【确定】按钮。
JAVA_HOME配置好之后,将%JAVA_HOME%\bin加入到【系统变量】的path中。完成后,打开命令行窗口,输入命令java-version,如出现图所示的提示,即表示安装成功。
tips:JDK安装路径最好不要出现中文,否则会出现意想不到的结果。
1.2 安装Intellij IDEA
在Intellij IDEA的官方网站http://www.jetbrains.com/idea/上可以免费下载IDEA。下载完IDEA后,运行安装程序,按提示安装即可。本书使用Intellij IDEA 2016.2版本,当然大家也可以使用其他版本的IDEA,只要版本不要过低即可。安装成功之后,打开软件界面。
1.3 安装Apache Maven(本处直接在IDEA中安装)
Apache Maven是目前流行的项目管理和构建自动化工具。虽然IDEA已经包含了Maven插件,但是笔者还是希望大家在工作中能够安装自己的Maven插件,方便以后项目配置需要。大家可以通过Maven的官方网站http://maven.apache.org/download.cgi下载最新版的Maven,本书的Maven版本为apache-maven-3.5.0。
下载完成后解压缩即可,例如,解压到D:盘上,然后将Maven的安装路径D:\apache-maven-3.5.0\bin加入到Windows的环境变量path中。安装完成后,在命令行窗口执行命令:mvn-v,如果输出如图所示的页面,表示Maven安装成功。
接下来,我们要在Intellij IDEA下配置Maven,具体步骤如下:
- 在Maven安装目录,即D:\apache-maven-3.5.0下新建文件夹repository,用来作为本地仓库。
- 在Intellij IDEA界面中,选择【File】→【Settings】,在出现的窗口中找到Maven选项,分别把【Maven home directory】【Usersettings file】【Local repository】,设置为我们自己Maven的相关目录,如图所示。

- 设置完成后,单击【Apply】→【OK】。至此,Maven在Intellij IDEA的配置完成。
这里需要注意的是,之所以把Maven默认仓库(C:${user.home}.m2\respository)的路径改为我们自己的目录(D:\apache-maven-3.5.0\repository),是因为respository仓库到时候会存放很多的jar包,放在C盘影响电脑的性能,所以才会修改默认仓库的位置。
2.一分钟快速搭建Spring Boot项目
2.1 使用Spring Initializr新建项目
使用Intellij IDEA创建Spring Boot项目有多种,比如Maven和SpringInitializr方式。这里只介绍Spring Initializr这种方式,因为这种方式不但可为我们生成完整的目录结构,还可为我们生成一个默认的主程序,节省时间。
- 在Intellij IDEA界面中,单击【File】→【New】→【Project】,在弹出的窗口中选择【Spring Initializr】选项,在【Project SDK】选择JDK的安装路径,如果没有则新建一个,单击【Next】按钮。

- 选择【Spring Boot Version】,这里按默认版本(本书使用的Spring Boot版本为2.1.6)即可。勾选【web】→【Spring WebStarter】选项,然后单击【Next】按钮,如图所示。

- 输入项目名称【spring-boot-book-v2】和项目存放目录,其他默认即可,然后单击【Finish】按钮。至此,一个完整的Spring Boot项目即创建完成,具体如图所示。

-
单击【NewWindow】表示在新的窗口打开项目,单击【This Window】表示在当前窗口打开项目,我们选择【New Window】按钮即可。
-
在IDEA开发工具上,找到刷新依赖的按钮(Reimport AllMaven Projects),下载相关的依赖包,这时开发工具开始下载SpringBoot项目所需的依赖包,如图所示。

至此,Spring Boot项目创建完成。
tips:下载Spring Boot依赖包是一个相对漫长的过程,可以去喝杯茶休息一会儿。
2.2 测试
Spring Boot项目创建完成之后,找到入口类DemoApplication中的main方法并运行。当看到如图所示,表示项目启动成功。同时还可以看出项目启动的端口(8080)及启动时间。

2.3 Spring Boot三种启动方式
- 使用DemoApplication中的main方法启动SpringBoot
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args){
SpringApplication.run(DemoApplication.class, args);
}
}
- 在Spring Boot应用的根目录下运行mvn spring-boot:run
### 在命令行窗口执行mvm spring-boot:run命令
mvm spring-boot:run
- 使用java-jar命令
### java -jar xxx.jar命令
java -jar demo-0.0.1-SNAPSHOT.jar
3.Spring Boot文件目录介绍
创建Spring Boot项目后,会产生一个工程目录,该工程目录存放了工程项目的各种文件,对于Spring Boot开发人员来说,了解该工程目录非常必要。
3.1 工程目录
- /src/main/java:目录下放置所有的Java文件(源代码文件)
- /src/main/resources:用于存放所有的资源文件,包括静态资源文件、配置文件、页面文件等。
- /src/main/resources/static:用于存放各类静态资源。
- /src/main/resources/templates:用于存放模板文件,如Thymeleaf模板文件。
- /src/main/resources/application.properties:配置文件,这个文件非常重要。Spring Boot默认支持两种配置文件类型(.properties和.yml)
- /src/test/java:放置单元测试类java代码。
- /target:放置编译后的.class文件和配置文件等。
Spring Boot将很多配置文件进行了统一管理,且配置了默认值。SpringBoot会自动在/src/main/resources目录下找application.properties或者application.yml配置文件,找到后将运用此配置文件中的配置,否则使用默认配置。这两种类型的配置文件有其一即可,也可以两者并存。两者的区别如下:
application.properties和application.yml配置文件的区别主要是书写格式不同,另外,application.yml格式不支持@PropertySource注解导入配置。
Tips:.properties配置文件的优先级高于.yml。在.properties文件中配置了server.port=8080,同时,在.yml配置了server.port=8090,SpringBoot将使用.properties中的8080端口。
3.2 入口类
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//入口类
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args){
SpringApplication.run(DemoApplication.class, args);
}
}
- @SpringBootApplication:是一个组合注解,包含@EnableAutoConfiguration、@ComponentScan和@SpringBootConfiguration三个注解,是项目启动注解。如果我们使用这三个注解,项目依旧可以启动起来,只是过于烦琐。此时,可用@SpringBootApplication简化。
@SpringBootApplication = @EnableAutoConfiguration + @ComponentScan + @SpringBootConfiguration
- SpringApplication.run:应用程序开始运行的方法。
Tips: 入口类需要放置在包的最外层,以便能够扫描到所有子包中的类。
3.3 测试类
Spring Boot的测试类主要放置在/src/test/java目录下面。项目创建完成后,Spring Boot会自动为我们生成测试类DemoApplicationTests.java,测试类的代码如下:
package com.example.demo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests{
@Test
public void contextLoads ()
}
}
- @RunWith(SpringRunner.class):@RunWith(Parameterized.class)是一个参数化运行器,可用于配合@Parameters使用JUnit的参数化功能。查源代码可知,SpringRunner类是继承的SpringJUnit4ClassRunner类,此处表明使用SpringJUnit4ClassRunner执行器,此执行器集成了Spring的一些功能。如果只是简单的JUnit单元测试,该注解可以去掉。
- @SpringBootTest:此注解能够测试我们的SpringApplication,因为Spring Boot程序的入口是SpringApplication,基本上所有配置都会通过入口类去加载,而该注解可以引用入口类的配置。
- @Test:JUnit单元测试的注解,注解在方法上表示一个测试方法。
当我们右键执行DemoApplicationTests.java中的contextLoads方法的时候,大家可以看到控制台打印的信息和执行入口类中的SpringApplication.run()方法,打印的信息是一致的。由此便知,@SpringBootTest是引入了入口类的配置。
3.4 pom文件
Spring Boot项目下的pom.xml文件主要用来存放依赖信息,具体代码如下(部分代码已省略):

- spring-boot-starter-parent:是一个特殊的starter,它用来提供相关的Maven默认依赖,使用它之后,常用的包依赖可以省去version标签。
- spring-boot-starter-web:只要将其加入到项目的maven依赖中,我们就会得到一个可执行的Web应用。该依赖中包含许多常用的依赖包,比如spring-web、spring-webmvc等。这样,我们不需要做任何Web配置,便能获得相关Web服务。
- spring-boot-starter-test:这个依赖和测试相关,只要引入它,就会把所有与测试相关的包全部引入。
- spring-boot-maven-plugin:这是一个Maven插件,能够以Maven的方式为应用提供Spring Boot的支持,即为Spring Boot应用提供执行Maven操作的可能,并能够将Spring Boot应用打包为可执行的jar或war文件。
4.Spring Boot 2.x新特性
4.1 配置变更
在2.x中废除了一些1.x中的配置,并增加了许多新配置,详细请查看以下链接中的变更表格。
4.2 第三方类库升级
Spring Boot 2.x对第三方类库升级了所有能升级的稳定版本,一些值得关注的类库升级如下:
- Spring Framework5+
- Tomcat8.5+
- Flyway5+
- Hibernate5.2+
- Thymeleaf3+
Spring Boot 2.x至少需要JDK8的支持,2.x应用了JDK8的许多高级新特性,所以当应用要升级到2.0版本时,先确认应用必须兼容JDK8。另外,2.x开始了对JDK9的支持。
4.3 HTTP/2支持
提供对HTTP/2的支持,如Tomcat、Undertow、Jetty,该功能依赖具体选择的应用服务器和应用环境。
4.4 响应式Spring编程支持
2.x通过启动器和自动配置全面支持Spring的响应式编程,响应式编程是完全异步和非阻塞的,它是基于事件驱动模型,而不是传统的线程模型。就连Spring Boot内部也对一些功能点进行了有必要的响应式升级,最值得注意的是对内嵌式容器的支持。
对响应式编程支持又包括以下几个技术模块:
- Spring WebFlux & WebFlux.fn支持。
- 响应式Spring Data支持。
- 响应式Spring Security支持。
- 内嵌式的Netty服务器支持。
4.5 其他新特性
除了前面几节列出的变化外,还包括其他新特性:
- 全面重写了Spring Boot的Gradle插件,并且最小支持Gradle4+,以便提供一些重要的特性提升。
- 2.x开始提供对Kotlin1.2的支持,并且提供了一个runApplication函数来运行Spring Boot应用。
- 在2.x中,对执行器端点进行了改进,所有的HTTP执行端点都暴露在/actuator路径下,并对JSON结果集也做了改善。
- 2.x默认使用HikariCP连接池。
- 提供了一个spring-boot-starter-json启动器对JSON读写的支持。
- 2.x提供了一个spring-boot-starter-quartz启动器对定时任务框架Quartz的支持。
- 所有支持的容器都支持过滤器的初始化。
5.Maven Helper插件的安装和使用
Maven Helper是一款可以方便查看Maven依赖树的插件,可以在IntellijIDEA上安装使用它。它支持多种视图来查看Maven依赖,同时可以帮助我们分析pom文件中的依赖是否存在冲突,方便快速定位错误。
5.1 Maven Helper插件安装
安装Maven Helper插件很简单,在菜单栏选择【File】→【Settings】→【Plugins】,在搜索框中输入【Maven Helper】,然后单击【Install】安装即可。安装成功之后重启Intellij IDEA即可使用。
5.2 Maven Helper插件使用
插件安装成功之后打开pom文件,我们看到除了Text视图外,多了一个Dependency Analyzer视图。

- Conflicts:查看所有有冲突的依赖包,如果存在冲突,会显示红色,同时会在右侧显示视图。我们可以单击有冲突的包,【右键】→【Exclude】来排除冲突,通过【右键】→【Jump ToSource[F12]】可以跳转到源代码。
- All Dependencies as List:以列表方式显示所有的依赖包。
- All Dependencies as Tree:以树形方式显示所有的依赖包。