转载请注明出处:https://oldnoop.tech/c/217.html
现在swagger用的人比较多了, 当项目中的接口比较多的时候,项目启动的时候,swagger扫描会占用很长的时间,比如10秒以上,
这样就可以思考一下,很自然的想到bean加载异步处理的话题, 那让swagger扫描异步执行是否可行呢?
- 首先swagger的扫描的核心类 DocumentationPluginsBootstrapper 是通过注解定义扫描包的方式 自动加载的, 需要再扫描包的时候排除这个类
- 手动注册这个bean, 然后让扫描方式异步执行即可
以swagger3为例, 这里说个题外话,网上有很多菜鸡帖子提到需要使用驱动注解@EnableOpenApi, 其实在引入起步依赖springfox-boot-starter时,
这里面已经有自动配置类OpenApiAutoConfiguration, 自动配置swagger3了, 是不需要使用驱动注解@EnableOpenApi
swagger3里面, 主要是修改几个核心配置类, 最终的关键在于 修改 负责扫描的核心类的扫描方法异步执行
首先来定义一个配置类,代替框架自带的配置类,
然后自定义需要的2个核心组件
然后是 第3个核心组件, 在这个配置上,排除执行扫描的核心类
最后, 手动注册 执行扫描的 核心类的 bean, 将扫描方式改为异步执行
再来,搞个花里胡哨的驱动注解
最后, 使用的时候,因为swagger3的自动配置类的存在, 需要排除自动配置类, 再使用上面的 驱动注解
swagger2 的扫描改为异步执行,处理思路 和 swagger3 类似, 只不过 配置类代码有所不同.