spring boot 优雅停止不生效
时间: 2023-07-24 10:50:01 浏览: 52
Spring Boot默认使用Tomcat作为嵌入式Web服务器,它的优雅停止需要使用Tomcat的Shutdown接口来实现。具体步骤如下:
1.在pom.xml文件中添加Tomcat的依赖。
```xml
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<version>${tomcat.version}</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
<version>${tomcat.version}</version>
</dependency>
```
2.在项目配置文件application.properties/application.yml中添加以下配置。
```properties
# 配置Tomcat的Shutdown接口端口号,默认为8005
server.tomcat.shutdown-port=8005
# 配置Tomcat的Shutdown接口的密钥,默认为空
server.tomcat.shutdown-key=
# 配置Tomcat的Connector监听的端口号,默认为8080
server.port=8080
```
3.在Spring Boot启动类中添加以下代码,创建Tomcat的Server和Connector,并将它们注入到Spring容器中。
```java
@SpringBootApplication
public class Application {
@Bean
public TomcatServletWebServerFactory servletWebServerFactory() {
return new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
// 添加ShutdownHook
context.addLifecycleListener(new Tomcat.FixContextListener());
}
};
}
@Bean
public Connector connector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setPort(8080);
return connector;
}
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
tomcat.addAdditionalTomcatConnectors(connector());
return tomcat;
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
4.在Spring Boot应用程序中,可以通过访问`http://localhost:8005/shutdown?key=`来优雅停止应用程序,其中`key`参数的值为配置文件中`server.tomcat.shutdown-key`的值。例如,如果`server.tomcat.shutdown-key`的值为`shutdown`,则可以通过访问`http://localhost:8005/shutdown?key=shutdown`来优雅停止应用程序。
请注意,如果应用程序部署在生产环境中,应该使用更加安全的密钥来保护Tomcat的Shutdown接口。