关闭Tomcat要平滑关闭 Spring Boot 应用的前提就是首先要关闭其内置的 Web 容器,不再处理外部新进入的请求。为了能让应用接受关闭事件通知的时候,保证当前 Tomcat 处理所有已经进入的请求,我们需要实现 TomcatConnectorCustomizer 接口,此接口是实现自定义 Tomcat Connector 行为的回调接口。 自定义 ConnectorConnector 属于 ...
org.springframework.boot.autoconfigure.context.LifecycleProperties 如源码所示,默认缓冲时间为:30秒。 再看下优雅关闭的源码: 根据Graceful可以找到几个相关的类,我们进入 Tomcat 的: org.springframework.boot.web.embedded.tomcat.GracefulShutdown public enum GracefulShutdownResult { /** * Requests remained activ...
而在SpringBoot 以jar包形式运行时,其tomcat容器是内嵌的模式,因此是由SpringBoot 来引导 Tomcat进行关闭,其关闭过程则是串行的。 4 Tomcat & 传统Spring & Springboot 上文我们分析了tomcat和传统spring是一个串行的优雅关闭机制,传统spring不会注册优雅关闭钩子,而是直接在tomcat的关闭过程中对自己进行关闭。 而spri...
1、如果你的springboot应用打包成“可执行jar”,我们通过可以借助springboot launchscript优雅关闭。 2、如果你的springboot应用是普通jar,通过“java -jar”启动,那么优雅关闭的方式需要外部脚本去控制。 不过无论如何,我们希望做一件事情,就是在应用即将退出之前,关闭tomcat时,让tomcat不再接收新请求、但是已经接收的...
定制Tomcat Connector 行为 要平滑关闭 Spring Boot 应用的前提就是首先要关闭其内置的 Web 容器,不再处理外部新进入的请求。为了能让应用接受关闭事件通知的时候,保证当前 Tomcat 处理所有已经进入的请求,我们需要实现 TomcatConnectorCustomizer 接口,这个接口的源码十分简单,从注释可以看出这是实现自定义 Tomcat Connector...
该设置决定了 Spring Boot 应用中的 Tomcat 服务器是否也会优雅地关闭。 // org.springframework.boot.web.embedded.tomcat.GracefulShutdown private void doShutdown(GracefulShutdownCallback callback, CountDownLatch shutdownUnderway) { try { List<Connector> connectors = getConnectors(); connectors.forEach...
Tomcat为例 Tomcat对应抽象接口org.springframework.boot.web.server.WebServer的shutDownGracefully函数由 org.springframework.boot.web.servlet.context.WebServerGracefulShutdownLifecycle调用, 该类实现了SmartLifecycle接口因此能在application context关闭的早期被调用. ...
目前版本的Spring Boot 优雅停机支持Jetty, Reactor Netty, Tomcat和 Undertow 以及反应式和基于 Servlet 的 web 应用程序都支持优雅停机功能。 优雅停机的目的: 如果没有优雅停机,服务器此时直接直接关闭(kill -9),那么就会导致当前正在容器内运行的业务直接失败,在某些特殊的场景下产生脏数据。
* 优雅关闭 Spring Boot */privatestaticclassGracefulShutdownimplementsTomcatConnectorCustomizer, ApplicationListener<ContextClosedEvent> {privatevolatileConnector connector;//获取tomcat的connector@Overridepublicvoidcustomize(Connector connector){this.connector = connector; ...
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><!--不使用默认的 tomcat 容器--><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions></dependency><!--...