摘要

项目是微服务架构,其中模块居多,但是我在跑其中一个模块时,发现无法查看 swagger 文档。由此进行了一系列排查。

正文

本文项目源码,Swagger2 访问路径 /v2/api-docs,路径源于 springfox.documentation.swagger2.web.Swagger2ControllerWebMvc#SWAGGER2_SPECIFICATION_PATH

一、项目 Build 出现 OOM

Java 项目 rebuild / run 时,提示 OutOfMemory。原因是 Java 项目过于臃肿了。

解决办法是File > Settings > Build,Execution,Deployment > Compiler,调大 Shared build process heap size(Mbytes) 的数值。

二、Swagger 404 但是一会又好了

已经确定 swagger 的配置没有问题,但是启动后访问 /v2/api-docs,居然提示 Unable to find specification for group

根据断点排查得知,swagger 的启动流程是这样的 启动容器 > 扫描文档并追加到文档缓存,如果项目本身特别臃肿的时候,就会出现类似,项目启动成功,但是访问 swagger 反而是 404。

三、Swagger2 空指针 Unable to scan documentation context default

微服务模块有很多,但是其中一个微服务的 swagger 居然打不开。日志如下

我排查问题的步骤如下

  1. 针对性的开启 debug 日志,参考
  2. 添加 NullPointerException 异常断点,参考
  3. 跟踪堆栈

跟踪堆栈,发现怎么变量还重复了,排查一下 model,发现是修饰符设置成了 public 导致的,设置为 private 即可解决

这只是导致问题诸多成因的其中之一,不过排查问题的原理皆如此。