创建SpringBoot项目
什么是 SpringBoot ?
简单来说,SpringBoot 的出现是为了简化Spring项目的创建、运行、调试、部署过程,boot的意思是启动、引导,整体来说就是快速启动 Spring。springboot 并不是一个新的框架,它只是spring的一个封装,从根本上讲就是一些库的集合,帮助开发者快速构建spring 项目,项目里面还是使用 spring 框架实现,所以 Spring 能做的,SpringBoot 也能做,而且做的更方便、快捷。
在使用 Spring 开发的时候,写项目时有伴有大量的 xml 配置文件要编写,随着快速开发的流行,这种方式已经不能满足需要了,springboot 的出现帮我们简化了项目配置,同时提供了很多注解,让我们编码也变得简单了。SpringBoot 简化了配置,不用再写 xml 了 ,传统 Spring 项目的 xml 配置文件被转化成 java config,直接利用 @Autowire 注解注入 Bean,而环境变量中的 properties、xml 文件集中到一个application.yml中。同时,SpringBoot 使项目部署变得简单,传统的Spring项目需要外部的 tomcat 容器来运行,而在springboot 中已经集成了 tomcat ,我们将项目打包成一个 jar 包,直接通过 java -jar xxx.jar
就可以运行项目,这也方便后续使用 docker 。
SpringBoot 能够使我们更加专注于业务逻辑的开发,只需记住 Just run 就可以了,那怎么创建一个 SpringBoot 项目呢?话不多说,还是先上个 demo 尝尝味道吧!全文里介绍了一个 SpringBoot 项目从创建到测试运行,再到打包部署的全过程。
创建 SpringBoot 项目
开发环境及工具
-
java 1.8+ springboot 是Javaweb开发框架,所以java开发环境是必要的,从Oracle官网上下载java1.8的安装包,安装到计算机上,并配置好环境变量。
-
maven 3.2+ 利用 maven 下载管理项目中需要的依赖资源,从 maven官网 下载 maven,解压到本地,将bin目录配置到环境变量 path 中,方便使用,为了提升依赖下载速度,建议配置阿里镜像。
-
IDE 我们使用 IntelliJ IDEA 工具来创建 spring boot 项目,所谓 “工欲善其事必先利其器”,我个人习惯使用 IDEA 来开发 java项目。也可以使用其它开发工具,比如 eclipse ,或官方推荐使用的 Spring Tool Suite 。
使用 maven 创建 SpringBoot 项目
用IDEA创建maven项目框架
-
打开IDEA,点击 Create New Project 创建项目
-
选择maven项目,Project SDK 选择 java1.8(如果没有,点击 New… 选择java安装路径),点击 Next
-
填入 GroupId 和 ArtifactId,点击 Next
GroupId 一般是公司域名倒序,如域名为 xxx.com,GroupId 就写com.xxx。ArtifactId 为模块名,也就是项目名。
-
填写项目名和存储路径,点击 Finish
-
完成项目创建,这是一个maven项目,目前还只有项目骨架
添加 SpringBoot 的依赖
- 将 springboot 最基础的依赖包加入到 maven 项目的 pom.xml 中
1 | <!--parent中定义了SpringBoot的基础依赖及一些默认配置内容,如配置文件的位置application.properties--> |
- 用IDEA下载需要的包,将自动导入springframework的包,以及tomcat、日志等web项目需要的包
编写项目逻辑代码
- 写一个简单的 controller 用来测试,在 src/main/java 下新建一个包 hello ,在其中新建一个java类 SampleController,其中代码如下:
1 | package hello; |
运行项目
-
在IDEA中点击 Run 菜单中的 Edit Configuration,进入配置编辑界面
-
点击左上角的 “+”,选择 SpringBoot
-
Main Class 选择刚才创建的类,点击 OK 完成配置
-
运行项目,点击IDEA工具栏中的运行图标
-
运行结果,如果项目启动,并在控制台打出如下日志信息,说明已经成功启动
-
访问 http://localhost:8080 ,页面显示 hello springboot!
使用 Spring Initilizr 创建SpringBoot项目
注意:创建过程需要联网,访问 https://start.spring.io
使用 IDEA 中提供的 Spring Initilizr 创建
-
点击 Create New Project ,选择 Spring Initilizr,点击 Next
初始化服务地址可以换成阿里的:https://start.aliyun.com/
使用阿里的创建 springboot 项目时的选项和官方的不太一样,创建的项目也略有不同,不过用起来同样方便。
-
选择java版本、创建方式、打包方式、填写项目信息,点击 Next
-
选择需要的依赖,这里列出了所有可能需要的库,根据需要进行选择,选择完成后点击 Next,现在只是创建简单的java web项目体验,所以我们只选择 Web 依赖,点击 Next
-
填写项目名称及存储路径,点击 Finish 完成项目创建
使用 Spring Initilizr 网页版创建
-
进入网站 https://start.spring.io ,填入项目相关信息及依赖,点击 “Create Project” 按钮即可将初始化完成的项目zip压缩包下载到本地
-
将demo项目从压缩包解压出来,导入到IDEA中,导入maven的依赖,完成项目创建
-
自动创建的pom.xml 内容如下:
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
<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>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--打包类型-->
<packaging>jar</packaging>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--通用测试模块,包含Junit、Hamcrest、Mockito-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!--SpringBoot maven插件-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
运行测试
-
用IDEA启动,在IDEA中直接点击工具栏中的运行按钮,即可运行项目,运行起来后到浏览器中访问:http://localhost:8080 ,发现显示如下页面,这说明项目已经正确的运行起来了,只是我们还没有写controller来处理请求,所以返回这个错误提示页面。
-
使用springboot maven插件运行,因为Spring Boot Maven插件中包含一个run目标,可以用来快速编译和运行程序,这种运行模式是热加载,可以即时编辑资源。进入项目根目录,运行指令
mvn spring-boot:run
,会编译并运行项目。类似的,如果项目用gradle构建,可以运行gradle bootRun
来运行项目。 -
如果运行测试的时候发现项目启动不了,控制台输出
Unregistering JMX-exposed beans on shutdown
原因是在创建项目时没有选择web依赖,创建的项目没有导入web工程所需的依赖,所以此时我们可以将 pom.xml 中springboot依赖的 artifactId,原来是 spring-boot-starter,改成 spring-boot-starter-web,再次导入需要的依赖即可正常启动。
原来的:
1 | <dependency> |
修改后的:
``````xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
``````
使用SpringBoot-Cli 安装 springboot
CLI 意思是 Command Line Interface,即命令行界面,使用命令行工具是体验 SpringBoot 的最佳方式,也是快速开发 Spring 的方法。
下载、安装、配置 SpringBoot-Cli
SpringBoot-Cli 下载地址:http://repo.spring.io/release/org/springframework/boot/spring-boot-cli/
-
打开链接后发现有很多历史版本可以选,根据需要选择下载,推荐下载最新发行版:1.5.8.RELEASE/
-
在windows系统下,我们选择下载 zip 压缩包
-
解压文件,并将 bin 目录配置到系统环境变量 path 中,这样在任意路径下都可以使用
-
测试安装结果,打开命令行工具(windows键 + R,运行 cmd),指定指令
spring --version
,如果正确显示spring cli 版本号,说明安装正确
-
使用
spring help
指令可以获取更多帮助信息
用springboot-cli创建SpringBoot项目
- 在要存储项目的目录下打开命令行工具,执行指令
spring init --dependencies=web spring-boot-demo
,(其中 spring-boot-demo 是项目名,也是模块名,artifactId),会访问 https://start.spring.io/ ,过一会就会将项目需要的文件下载到 /spring-boot-demo 目录下,将其导入IDEA下载相关maven依赖后就可以启动。如果需要多个依赖可以在参数后面,如spring init --dependencies=web,jpa spring-boot-demo
。
一个文件体验springboot
- 写一个 java 测试文件,文件名为:app.java,内容如下:
1 |
|
- 也可以写一个 groovy 文件来测试,文件名为: app.groovy,内容如下:
1 |
|
运行测试
- 进入到测试文件目录下,打开命令行工具,使用SpringBoot-CLI 提供的 spring run <文件> 指令来启动SpringBoot。如果是java测试文件,执行指令
spring run app.java
,如果是groovy测试文件,执行指令spring run app.groovy
,打出如下日志,说明已经正确启动项目
- 打开浏览器,进入 http://localhost:8080 页面,显示 Hello Spring Boot!
单元测试
在项目中引入 spring-boot-starter-test 模块后,就可以使用 Junit 进行单元测试。
1 | <dependency> |
自动生成的 SpringBoot 项目中的test目录就是用来存放单元测试代码的,我们可以把生成的单元测试类放到这里,建议单元测试类的目录结构与源代码的目录结构保持一致,规范管理,方便查找。
单元测试类需要添加两个注解,@RunWith(SpringRunner.class)
和 @SpringBootTest(classes = DemoApplication.class)
,前者用于引入 Spring 对 Junit 的支持,后者用于指定 SpringBoot 的启动类(参数为项目中启动类的class),在测试时就可以使用 @Autowired
注解注入需要的 bean 或 service 等。在运行测试方法时会将整个项目都运行起来,最后完成测试后退出。
1 | // 测试类代码 |
1 | // 被测试的 service 类,其中 appName 属性是依靠 Spring 注入的 |
项目打包部署
我们的 SpringBoot 项目是使用 maven 工具来构建的,所以我们可以很方便的使用maven来打包项目。
引入打包插件
当我们创建的是maven项目,我们可以在依赖中添加打包方式和 spring-boot-maven-plugin 打包插件(如下所示),利用maven来打包。如果是使用 Spring Initilizr 方式创建的项目,已经导入了打包插件,不用手动添加,可以在 pom.xml 中看到,如下代码:
1 | <!-- 打包方式:jar 或 war --> |
使用IDEA打包
-
如图所示,点击IDEA侧边的 Maven Projects → 项目名 “demo” → Lifecycle → package 或 install,点击上方的绿色播放按钮“Run Maven Build”开始打包。使用IDEA 的maven项目管理功能打包完成后,提示 “ BUILD SUCCESS ”,说明打包成功,在项目根目录下的 target目录下存放着打包好的项目文件,文件名为:demo-0.0.1-SNAPSHOT.jar,如果打包方式为 war,将产生 .war 的包。
-
使用 maven 指令打包,进入到项目根目录,打开命令行工具,执行 maven 打打包命令
mvn package
或 maven 的安装命令mvn install
开始打包,打包完成后提示 BUILD SUCCESS,说明打包成功,可以到target目录下查看打好的包。(打包前最好先使用mvn clean
清除以前编译的内容,或者使用mvn clean package
命令先清空再编译打包。如果需要跳过测试可增加参数,如mvn clean package -D maven.test.skip=true
。) -
使用 SpringBoot-CLI 打包,前面的示例中,我们可以只写一个 java 或groovy文件就用 springboot-cli 启动了项目,现在我们只需要执行
spring jar app.jar *.java
,就可以打包成一个名叫 app.jar 的包了,同样可以执行spring jar app.jar *.groovy
来打包groovy文件。使用spring init
指令创建的项目也是maven项目,打包方式参考上面两条。
部署及运行打包的项目
-
jar 包:使用
java -jar <文件名>
命令运行 jar 包,在target目录下打开命令行工具,执行指令java -jar demo-0.0.1-SNAPSHOT.jar
,项目可以正常启动,并可以在浏览器中访问,说明打包正确。在使用 jar 包运行时,可以在运行命令中指定运行参数,如
设定字符编码为 UTF-8,防止乱码:
java -jar -Dfile.encoding=utf-8 demo.jar
设置运行的端口:
java -jar --server.port=8081 demo.jar
-
war 包:使用 Tomcat 运行 war 包,如果在 pom.xml 中设置的打包方式是 war,使用maven打包出来的将是一个 war 包,我们可以把它放到 Tomcat 的 webapps 路径下,启动 Tomcat 时将会自动解压并运行项目,在浏览器中测试是否能够正常访问。
打包 web 资源
当我们使用 SpringBoot 创建了 web 项目,web 前端的内容一般放在 src/main/webapp
目录下,打包时往往需要将前端的内容一起打包,这时需要修改 pom.xml
中打包配置,增加资源配置。在 bulid
项中增加子项 resources
,在其中的 resource
中添加要打包的资源。使用相同的方法还可以打包其它目录下的资源。
示例:
1 | <build> |