前言
因为微服务的架构中,服务的开启和关闭是非常频繁的操作步骤, 所以在默认的情况下, 如果请求没有处理完,这个时候给springboot发起了关闭信号,会导致正在处理的请求失败,所以最好要对于这种情况进行处理。
常用的方案
现在项目中间,常用了两种容器,tomcat和jetty,所以为了方便大家优雅的进行关闭,所以把关闭的代码做成了一个starter,根据容器的类型进行判断,然后注册相关的关闭代码。
原理
- 通过实现
ApplicationListener<ContextClosedEvent>
接口来完成关闭服务时候的逻辑处理。 - 通过实现
TomcatConnectorCustomizer
或者JettyServerCustomizer
接口来获得关闭服务时候操作tomcat容器或者jetty容器的对象。 - 然后通过把他们的实现注册成bean,做成autoconfig的方式,提供给需要使用的服务使用。
- 把这个项目的pom.xml文件里面的tomcat和jetty声明为optional,然后再在bean的初始条件里面加上对应容器的class,就可以根据启动时候使用的容器类型进行对应bean的注册了。
相关代码
- 具体代码可以参考:https://github.com/dragontree101/spring-boot-demo/tree/master/spring-boot-web-demo
- 代码的依赖中引入https://github.com/dragontree101/spring-boot-demo/tree/master/spring-boot-shutdown-demo 然后就可以进行测试了
本文由 创作,采用 知识共享署名4.0 国际许可协议进行许可。本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为: 2020/05/15 06:36