SpringBoot整合Swagger和Actuator的使用教程详解
前言
本篇文章主要介绍的是springboot整合swagger(api文档生成框架)和springboot整合actuator(项目监控)使用教程。
springboot整合swagger
说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码。
swagger 介绍
swagger 是一套基于 openapi 规范构建的开源工具,可以帮助我们设计、构建、记录以及使用 rest api。swagger 主要包含了以下三个部分:
- swagger editor:基于浏览器的编辑器,我们可以使用它编写我们 openapi 规范。
- swagger ui:它会将我们编写的 openapi 规范呈现为交互式的 api 文档,后文我将使用浏览器来查看并且操作我们的 rest api。
- swagger codegen:它可以通过为 openapi(以前称为 swagger)规范定义的任何 api 生成服务器存根和客户端 sdk 来简化构建过程。
swagger优缺点
优点
- 易用性好,swagger ui提供很好的api接口的ui界面,可以很方面的进行api接口的调用。
- 时效性和可维护性好,api文档随着代码变更而变更。 swagger是根据注解来生成文api档的,我们可以在变更代码的时候顺便更改相应的注解即可。
- 易于测试,可以将文档规范导入相关的工具(例如 soapui), 这些工具将会为我们自动地创建自动化测试。
缺点
- 重复利用性差,因为swagger毕竟是网页打开,在进行接口测试的时候很多参数无法进行保存,因此不易于重复利用。复杂的场景不易模拟,比如使用token鉴权的,可能每次都需要先模拟登录,再来进行接口调用。
- 不过上述的这些缺点其实也无伤大雅,可以配合postman来一起使用!
- postman可以保存参数并持久化生成文件,也可以在header中保存token信息,也可以动态的生成数字签名等等。
如果有兴趣的话,可以看看我之前写的这篇文章。
地址: postman使用教程
swagger 相关地址
swagger官网:http://swagger.ioswagger的
github地址:
开发准备
环境要求
jdk:1.8
springboot:1.5.9.release
首先还是maven的相关依赖:
pom.xml文件如下:
<properties> <project.build.sourceencoding>utf-8</project.build.sourceencoding> <project.reporting.outputencoding>utf-8</project.reporting.outputencoding> <java.version>1.8</java.version> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version>1.5.9.release</version> <relativepath/> </parent> <dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-test</artifactid> <scope>test</scope> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-devtools</artifactid> <optional>true</optional> <scope>test</scope> </dependency> <!-- swagger restful api --> <dependency> <groupid>io.springfox</groupid> <artifactid>springfox-swagger2</artifactid> <version>2.2.2</version> </dependency> <dependency> <groupid>io.springfox</groupid> <artifactid>springfox-swagger-ui</artifactid> <version>2.2.2</version> </dependency> </dependencies>
注: swagger的jar包既可原生的 swagger的架包,也可以选择maven仓库springboot已经整合好的swagger的架包。
application.properties
的文件的配置和一般的springboot项目一样即可。
代码编写
springboot使用swagger其实很简单,只需要在启动的时候添加@enableswagger2
注解开启,然后再使用@bean
注解初始化一些相应的配置即可,比如编辑swagger ui界面的信息,指定swagger负责扫描的package等等。
swagger代码配置如下:
@configuration @enableswagger2 public class swagger2 { @bean public docket createrestapi() { return new docket(documentationtype.swagger_2) .apiinfo(apiinfo()) .select() .apis(requesthandlerselectors.basepackage("com.pancm")) .paths(pathselectors.any()) .build(); } private apiinfo apiinfo() { return new apiinfobuilder() .title("spring boot中使用swagger2构建restful apis") .description("测试") .termsofserviceurl("http://www.panchengming.com/") .contact("xuwujing") .version("1.0") .build(); } }
因为swagger主要是用于生成api文档,因此这里我们可以直接编写控制层的相关代码,忽略掉service层和dao层相关的代码编写。这里我们首先编写一个实体类。
实体类
又是万能的用户表
public class user { private long id; private string name; private integer age; //getter 和 setter 略 }
controller 控制层
swagger主要的使用就是在控制层这块,它是通过一些注解来为接口提供api文档。下述的代码中主要使用的注解为这两个@apioperation
和 @apiimplicitparam
这两个,@apioperation
注解来给api增加说明并通过@apiimplicitparams
注解来给参数增加说明,其中 value
是标题,notes
是详细说明。
下列是swagger的一些注解说明,更详细的可以查看官方的wiki文档。
@api:将类标记为swagger资源。
@apiimplicitparam:表示api操作中的单个参数。
@apiimplicitparams:一个包装器,允许列出多个apiimplicitparam对象。
@apimodel:提供有关swagger模型的其他信息,比如描述pojo对象。
@apimodelproperty: 添加和操作模型属性的数据。
@apioperation: 描述针对特定路径的操作或通常是http方法。
@apiparam: 为操作参数添加其他元数据。
@apiresponse: 描述操作的可能响应。
@apiresponses: 一个包装器,允许列出多个apiresponse对象。
@authorization: 声明要在资源或操作上使用的授权方案。
@authorizationscope: 描述oauth2授权范围。
@responseheader: 表示可以作为响应的一部分提供的标头。
@apiproperty: 描述pojo对象中的属性值。@apierror : 接口错误所返回的信息...
官方wiki文档地址:
https://github.com/swagger-api/swagger-core/wiki/swagger-2.x---annotations
控制层代码如下:
@restcontroller @requestmapping(value = "/api") public class userrestcontroller { private final logger logger = loggerfactory.getlogger(this.getclass()); @apioperation(value="创建用户", notes="根据user对象创建用户") @apiimplicitparam(name = "user", value = "用户详细实体user", required = true, datatype = "user") @postmapping("/user") public boolean insert(@requestbody user user) { logger.info("开始新增用户信息!请求参数:{}",user); return true; } @apioperation(value="更新用户", notes="根据user对象更新用户") @apiimplicitparam(name = "user", value = "用户详细实体user", required = true, datatype = "user") @putmapping("/user") public boolean update(@requestbody user user) { logger.info("开始更新用户信息!请求参数:{}",user); return true; } @apioperation(value="删除用户", notes="根据user对象删除用户") @apiimplicitparam(name = "user", value = "用户详细实体user", required = true, datatype = "user") @deletemapping("/user") public boolean delete(@requestbody user user) { logger.info("开始删除用户信息!请求参数:{}",user); return true; } @apioperation(value="获取用户列表", notes="根据user对象查询用户信息") @apiimplicitparam(name = "user", value = "用户详细实体user", required = true, datatype = "user") @getmapping("/user") public user findbyuser(user user) { logger.info("开始查询用户列表,请求参数:{}",user); user user2 =new user(); user2.setid(1l); user2.setage(18); user2.setname("xuwujing"); return user2; } }
app 入口
和普通的springboot项目基本一样。
代码如下:
@springbootapplication public class swaggerapplication { private static final logger logger = loggerfactory.getlogger(swaggerapplication.class); public static void main(string[] args) { springapplication.run(swaggerapplication.class, args); logger.info("swagger程序启动成功!"); } }
功能测试
我们成功启动该程序之后,在浏览器上输入:http://localhost:8183/swagger-ui.html
, 就可以看到swagger的界面了。
界面的示例图如下:
由于swagger的操作主要是在界面操作,因此用图片会更加有说服力。
使用get请求测试示例图如下:
springboot整合actuator
说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码。
actuator介绍
从本质上讲,actuator为我们的应用程序带来了生产就绪功能。通过这种依赖关系监控我们的应用程序,收集指标,了解流量或数据库的状态变得微不足道。这个库的主要好处是我们可以获得生产级工具,而无需自己实际实现这些功能。actuator主要用于公开有关正在运行的应用程序的运行信息 - 运行状况,指标,信息,转储,env等。它使用http端点或jmx bean来使我们能够与它进行交互。一旦这个依赖关系在类路径上,就可以开箱即用几个端点。与大多数spring模块一样,我们可以通过多种方式轻松配置或扩展它。
注意事项
actuator的1.x版本和2.x版本差别很大,本文介绍的是1.x版本。
actuator现在与技术无关,而在1.x中,它与mvc相关联,因此与servlet api相关联。
在2.x中,actuator定义了它的模型,可插拔和可扩展,而不依赖于mvc。因此,通过这个新模型,我们可以利用mvc和webflux作为底层web技术。
此外,可以通过实施正确的适配器来添加即将到来的技术。
最后,jmx仍然支持在没有任何其他代码的情况下公开端点。
上述的说明参考actuator官网。
官网地址:
开发准备
环境要求
jdk:1.8
springboot:1.5.9.release
首先还是maven的相关依赖:
pom.xml文件如下:
@springbootapplication public class swaggerapplication { private static final logger logger = loggerfactory.getlogger(swaggerapplication.class); public static void main(string[] args) { springapplication.run(swaggerapplication.class, args); logger.info("swagger程序启动成功!"); } }
然后就是application.yml的文件配置,这里的配置主要是指定监控的端口和路径以及关闭安全认证等等。
application.yml:
server: port: 8181 management: security: enabled: false port: 8888 context-path: /monitor endpoints: shutdown: enabled: true info: app: name:springboot-actuator version:1.0
代码编写
其实这块不需要代码的编写,因为它只需要你在项目中添加了该依赖并进行配置之后即可使用。这里我们在创建一个普通的springboot项目并且添加了actuator的相关依赖,然后通过调用actuator提供的一些接口就可以得知相关的信息。
这些接口的一些说明如下:
1./autoconfig 可以得到配置生效信息
/configprops 可以得到属性的内容和默认值/beans 可 以得到bean的别名、类型、是否单例、类的地址、依赖等信息/dump 可 以得到线程名、线程id、线程的状态、是否等待锁资源等信息/env 可以得到环境变量、jvm 属性、命令行参数、项目使用的jar包等信息
5.1 /sun.boot.library.path 可以得到jdk安装路径/health 可以得到磁盘检测和数据库检测等信息/mappings 可以得到全部的uri路径,以及它们和控制器的映射关系/metrics 可以得到jvm内容使用、gc情况、类加载信息
8.1 /gc.* 可以得到gc相关信息
8.2 /mem.* 可以得到内存信息 .../info 可以得到自定义的配置信息/shutdown 可以进行关闭程序 post请求/trace 可以得到所web请求的详细信息
12 ....
更多的相关配置说明可以查看官方文档!
如果通过通过接口信息返回的数据进行查看不够清晰明了的话,可以结合springcloud hystrix-dashboard进行转换图表查看。
具体使用可以参考: springcloud学习系列之三----- 断路器(hystrix)和断路器监控(dashboard) 这篇文章。
功能测试
我们成功启动该程序之后,便来进行测试。
首先查看启动日志,会发现启动了两个端口,一个是springboot项目自身的端口,还有一个actuator监控的端口。
示例图:
对外提供的actuator主要是可以帮助我们获取一些程序以及一些环境的相关信息。
比如获取程序健康状态。
在浏览器输入:
http://localhost:8888/monitor/health
即可查看。
示例图:
当然也可以自定一些程序信息,比如定义程序版本。
在浏览器输入:
http://localhost:8888/monitor/info
示例图:
其它
项目地址
springboot整合swagger的项目工程地址:
https://github.com/xuwujing/springboot-study/tree/master/springboot-swagger
springboot整合actuator的项目工程地址:
https://github.com/xuwujing/springboot-study/tree/master/springboot-actuator
springboot整个集合的地址:
https://github.com/xuwujing/springboot-study
总结
以上所述是小编给大家介绍的springboot整合swagger和actuator的使用教程详解,希望对大家有所帮助
推荐阅读
-
SpringBoot整合Swagger和Actuator的使用教程详解
-
详解php的魔术方法__get()和__set()使用介绍_PHP教程
-
springboot整合shiro多验证登录功能的实现(账号密码登录和使用手机验证码登录)
-
Git的安装和使用教程详解
-
Git的安装和使用教程详解
-
SpringBoot整合Swagger和Actuator
-
tomcat9 下载安装和配置+整合到eclipse的教程详解
-
荐 springboot整合swagger2以及swagger2的介绍与Spring Security的整合使用
-
springboot整合websocket最基础入门使用教程详解
-
SpringBoot整合通用Mapper和PageHelper,使用PageHelper.startPage()失效的问题