API 文档构建工具 - Swagger2
由于
Spring Boot
能够快速开发、便捷部署等特性,通常在使用
Spring Boot
构建
Restful
接口应用时考虑到多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web
前端。对于不同的终端公用一套接口
API
时,对于联调测试的时候就需要知道后端提供的接口 API
列表文档,对于服务端开发人员来说就需要编写接口文档,描述接口的调用地址、参数结果等,这里借助第三方构建工具 Swagger2
来实现
API
文档生成功能。
环境整合配置
pom.xml
依赖添加
<dependency>
<groupId>
io.springfox
</groupId>
<artifactId>
springfox-swagger2
</artifactId>
<version>
2.9.2
</version>
</dependency>
<dependency>
<groupId>
io.springfox
</groupId>
<artifactId>
springfox-swagger-ui
</artifactId>
<version>
2.9.2
</version>
</dependency>
@Configuration
@EnableSwagger2
public class
Swagger2
{
@Bean
public
Docket createRestApi
() {
return new
Docket
(
DocumentationType
.
SWAGGER_2
)
.
apiInfo
(
apiInfo
())
.
select
()
.
apis
(
RequestHandlerSelectors
.
basePackage
(
"com.xxxx.springboot.controller"
))
.
paths
(
PathSelectors
.
any
())
.
build
();
}
private
ApiInfo apiInfo
() {
return new
ApiInfoBuilder
()
.
title
(
"
用户管理接口
API
文档
"
)
.
version
(
"1.0"
)
.
build
();
}
}
Swagger2
常用注解说明
@Api
@Api
:用在请求的类上,说明该类的作用
tags
=
"
说明该类的作用
"
@Api
(
tags
=
"APP
用户注册
Controller"
)
@ApiOperation
@ApiOperation
:
"
用在请求的方法上,说明方法的作用
"
value
=
"
说明方法的作用
"
notes
=
"
方法的备注说明
"
@ApiOperation
(
value
=
"
用户注册
"
,
notes
=
"
手机号、密码都是必填项,年龄是选填项,但必须是数字
"
)
@ApiImplicitParams
@ApiImplicitParams
:用在请求的方法上,包含一组参数说明
@ApiImplicitParam
:用在
@ApiImplicitParams
注解中,指定一个请求参数的配置信息
name
:参数名
value
:参数的汉字说明、解释
required
:参数是否必须传
paramType
:参数放在哪个地方
· header
-->
请求参数的获取:
@RequestHeader
· query
-->
请求参数的获取:
@RequestParam
· path
(用于
restful
接口)
-->
请求参数的获取:
@PathVariable
· body
(不常用)
· form
(不常用)
dataType
:参数类型,默认
String
,其它值
dataType
=
"Integer"
defaultValue
:参数的默认值
@ApiResponses
@ApiResponses
:用于请求的方法上,表示一组响应
@ApiResponse
:用在
@ApiResponses
中,一般用于表达一个错误的响应信息
code
:数字,例如
400
message
:信息,例如
"
请求参数没填好
"
response
:抛出异常的类
@ApiOperation
(
value
=
"select
请求
"
,
notes
=
"
多个参数,多种的查询参数类型
"
)
@ApiResponses
({
@ApiResponse
(
code
=
400
,
message
=
"
请求参数没填好
"
),
@ApiResponse
(
code
=
404
,
message
=
"
请求路径没有或页面跳转路径不对
"
)
})
@ApiModel
@ApiModel
:用于响应类上,表示一个返回响应数据的信息
(这种一般用在
post
创建的时候,使用
@RequestBody
这样的场景,
请求参数无法使用
@ApiImplicitParam
注解进行描述的时候)
@ApiModelProperty
:用在属性上,描述响应类的属性
@ApiModel
(
description
=
"
返回响应数据
"
)
public class RestMessage implements Serializable
{
@ApiModelProperty
(
value
=
"
是否成功
"
)
private boolean success
=
true
;
@ApiModelProperty
(
value
=
"
返回对象
"
)
private Object data
;
@ApiModelProperty
(
value
=
"
错误编号
"
)
private Integer errCode
;
@ApiModelProperty
(
value
=
"
错误信息
"
)
private String message
;
/* getter/setter */
}
用户模块注解配置
Controller 使用注解
JavaBean
使用注解
Swagger2
接口文档访问
启动工程,浏览器访问 :
http://localhost:8080/springboot_mybatis/swagger-ui.html
SpringBoot
应用热部署
什么是热部署?
热部署,就是在应用正在运行的时候升级软件(增加业务
/
修改
bug
),却不需要重新启动应用。
大家都知道在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动效果,往往需要重启应用查看改变效果,其实就是重新编译生成了新的 Class
文件,这个文件里记录着和代码等对应的各种信息,然后 Class
文件将被虚拟机的
ClassLoader
加载。
而热部署正是利用了这个特点,它监听到如果有
Class
文件改动了,就会创建一个新的
ClaassLoader进行加载该文件,经过一系列的过程,最终将结果呈现在我们眼前,Spring Boot
通过配置
DevTools工具来达到热部署效果。
在原理上是使用了两个
ClassLoader
,一个
ClassLoader
加载那些不会改变的类(第三方
Jar
包), 另一个ClassLoader
加载会更改的类,称为
restart ClassLoader
,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个
restart ClassLoader
,由于需要加载的类相比较少,所以实现了较快的重启时间。
热部署环境配置与测试
配置
DevTools
环境
修改
Pom
文件,添加
DevTools
依赖
<!-- DevTools
的坐标
-->
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-devtools
</artifactId>
<!--
当前这个项目被继承之后,这个不向下传递
-->
<optional>
true
</optional>
</dependency>
同时在
plugin
中添加
devtools
生效标志
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
<configuration>
<fork>
true
</fork>
<!--
如果没有该配置,热部署的
devtools
不生效
-->
</configuration>
</plugin>
devtools
可以实现页面热部署(即页面修改后会立即生效,这个可以直接在
application.properties
文件中配置
spring.thymeleaf.cache=false
来实现),实现类文件热部署(类文件修改后不会立即生效),实现对属性文件的热部署。即 devtools
会监听
classpath
下的文件变动,并且会立即重启应用 (发生在保存时机),注意:因为其采用的虚拟机机制,该项重启是很快的。配置了后在修改 java
文件后也就支持了热启动,不过这种方式是属于项目重启(速度比较快的项目重启),会清空 session
中的值,也就是如果有用户登陆的话,项目重启后需要重新登陆。
全局配置文件配置
在
application.yml
中配置
spring.devtools.restart.enabled=false
,此时
restart
类加载器还会初始
化,但不会监视文件更新。
IDEA
配置
当我们修改了
Java
类后,
IDEA
默认是不自动编译的,而
spring-boot-devtools
又是监测
classpath下的文件发生变化才会重启应用,所以需要设置 IDEA
的自动编译。
自动编译配置
File -> Settings -> Compiler -> Build Project automatically
Registry
属性修改
ctrl + shift + alt + /
,选择
Registry
,勾上
Compiler autoMake allow when app running
SpringBoot
单元测试
做过
web
项目开发的对于单元测试都并不陌生了,通过它能够快速检测业务代码功能的正确与否, SpringBoot 框架对单元测试也提供了良好的支持,来看
SpringBoot
应用中单元测试的使用。
Spring Cache
相关注解说明
SpringBoot
缓存实现内部使用
SpringCache
实现缓存控制,这里集成
Ehcache
实际上是对
SpringCache
抽象的其中一种实现,这里在使用
Ehcache
实现缓存控制时相关注解说明如下
:
@CacheConfig
用于标注在类上,可以存放该类中所有缓存的公有属性,比如设置缓存的名字。
@Cacheable
应用到读取数据的方法上,即可缓存的方法,如查找方法,先从缓存中读取,如果没有再调用相应方法获取数据,然后把数据添加到缓存中。
@CachePut
应用到写数据的方法上,如新增
/
修改方法,调用方法时会自动把相应的数据放入缓存,
@CachePut
的参数与 @Cacheable
类似
@CacheEvict
应用到移除数据的方法上,如删除方法,调用方法时会从缓存中移除相应的数据,
@Caching
组合多个
Cache
注解使用。