《回顾》
上一篇,详细介绍集成Mybatis、Druid及使用Druid监控功能,对应用进行基本的监控。不知道你是否亲自试过。
本篇,将介绍一款接口管理及在线测试神器,Swagger-UI。另外,会讲解到自定日志。意思就是,你可以把SQL单独打印到一个日志文件里,把接口信息打印到一个日志文件里,页面信息打印到一个日志文件里。
先上个图,看下Swagger效果
一、集成Swagger2
1、Maven依赖
io.springfox
springfox-swagger2
2.9.2
io.springfox
springfox-swagger-ui
2.9.2
2、新建配置类
此类用于配置Swagger信息。也就说,和SpringBoot集成,全靠它了。
@Configuration
@EnableSwagger2
public class SwaggerConfig extends WebMvcConfigurationSupport{
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
@Bean
public Docket api(){
return new Docket(DocumentationType.SWAGGER_2)
.groupName("v1")
.select()
.apis(RequestHandlerSelectors.basePackage("com.zhou.springbootz05"))
.paths(PathSelectors.any())
.build()
.apiInfo(apiInfo());
}
private ApiInfo apiInfo(){
return new ApiInfoBuilder()
.title("Spring Boot中使用Swagger2构建RESTful APIs")
.description("spring boot , swagger2")
.contact(new Contact("zhoudong", "http://blog.csdn.net/zdshare", "[email protected]"))
.version("1.0")
.build();
}
}
3、使用方法
配置上面的类以后,包名下,所有的Controller都会自动被扫描到Swagger-UI中。
即使不做任何配置,也可以简单的当作在线测试工具使用。但是,建议还是做一些最基本的配置,起到文档管理的作用。
参照下面代码
@ApiOperation(value = "获取用户", notes = "获取用户", httpMethod = "GET")
@ApiImplicitParams({
@ApiImplicitParam(name = "userId", value = "用户ID", required = true),
@ApiImplicitParam(name = "userCode", value = "用户Code")
})
@GetMapping("/load_user")
public Map loadUser(@RequestParam String userId, @RequestParam(required = false) String userCode){
log.info("【load_user】获取到参数:userName:{},userCode:{}",userId,userCode);
if(StringUtils.isEmpty(userCode)) userCode = "";
return Map.of("userCode",userCode,"userId",userId,"time", System.currentTimeMillis());
}
注释介绍:
@ApiOperation:用在方法上,起到说明方法的作用
value:URL路径介绍
notes:方法说明
httpMethod:请求方式,GET、POST、PUT、DELETE、OPTIONS、OPTIONS
@ApiImplicitParams:用在方法上包含一组参数说明;
@ApiImplicitParam:用在 @ApiImplicitParams 注解中,指定一个请求参数的各个方面
paramType:参数放在哪个地方
name:参数代表的含义
value:参数名称
dataType: 参数类型,有String/int,无用
required : 是否必要
defaultValue:参数的默认值
更多参数,请参考官方文档,这些参数,可以满足日常开发中99%的需求。
4、使用Swagger-UI测试接口
启动应用,访问:
http://localhost:8080/swagger-ui.html
以红框里面的接口为例
接口有2个参数,userId必填、userCode非必填。查看Swagger-UI显示情况。
点击蓝色框中的“Try it out”
输入必填项, 点击蓝色框中的“Excute”
返回结果,和上面代码逻辑里面的一致。
有了它,你还用担心几十、几百个项目接口管理问题吗?
Swagger-UI 将会运用于未来每一个演示项目中。
二、多文件日志
生产环境中,如果把应用所有的日志,都输出到一个文件里面,对于问题排查,很不友好。
所以,通常我们会根据业务及技术模块等多个维度来区分日志文件。
简单举例:
页面的输出到*-web.log
接口的输出到*-api.log
异常信息输出到*-error.log
数据库相关的输出到*-dal.log
...
2.1 创建配置文件
resources/logback.xml
内容如下:(代码量较多,建议回复:springbootz 下载代码导入IDE查看)
${CONSOLE_LOG_PATTERN}
ACCEPT
DENY
${logRoot}/web.log
%d{yyyy-MM-dd HH:mm:ss} [%class:%line] [%thread] - %m%n
INFO
ACCEPT
DENY
${logRoot}/web.log.%d{yyyy-MM-dd}
30
${logRoot}/web-error.log
%d{yyyy-MM-dd HH:mm:ss} [%class:%line] [%thread] - %m%n
ERROR
ACCEPT
DENY
${logRoot}/web-error.log.%d{yyyy-MM-dd}
30
${logRoot}/dal-sql.log
%d{yyyy-MM-dd HH:mm:ss} [%class:%line] [%thread] - %m%n
DEBUG
ACCEPT
DENY
${logRoot}/dal-sql.log.%d{yyyy-MM-dd}
30
注意:配置完该文件后,application.properties 文件中,不在需要日志相关配置。
配置完毕后,启动应用,前往日志目录下查看日志文件
通过Swagger-UI 对含有数据库操作的接口,进行一次访问。(测试 应用日志和SQL日志是否被打印到对应的文件中)
查看日志文件内容:
如此区分,如果去查询10天或者20天之前的日志,是不是就更清晰了呢?
博客内所有文章,每周从公众号同步一次。
文章源码均可从公众号获取。
如果您可以关注下,那就好了。