springboot的优雅的进行关闭

前言

因为微服务的架构中,服务的开启和关闭是非常频繁的操作步骤, 所以在默认的情况下, 如果请求没有处理完,这个时候给springboot发起了关闭信号,会导致正在处理的请求失败,所以最好要对于这种情况进行处理。

常用的方案

现在项目中间,常用了两种容器,tomcat和jetty,所以为了方便大家优雅的进行关闭,所以把关闭的代码做成了一个starter,根据容器的类型进行判断,然后注册相关的关闭代码。

原理

  1. 通过实现 ApplicationListener 接口来完成关闭服务时候的逻辑处理。
  2. 通过实现 TomcatConnectorCustomizer 或者 JettyServerCustomizer 接口来获得关闭服务时候操作tomcat容器或者jetty容器的对象。
  3. 然后通过把他们的实现注册成bean,做成autoconfig的方式,提供给需要使用的服务使用。
  4. 把这个项目的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
然后就可以进行测试了

你可能感兴趣的:(springboot的优雅的进行关闭)