本文将介绍几种方式来优雅的关闭 Spring Boot,分别如下:
准备项目
假如我们创建了一个 Spring Boot 项目,该项目的结构如下图:
其中,TerminateBean 类的代码如下:package com.huangx.springboot.springboot_shutdown_demo1.bean;
import javax.annotation.PreDestroy;
public class TerminateBean {
@PreDestroy
public void preDestroy() {
System.out.println("TerminalBean is destroyed");
}
}
上面类中,使用 @PreDestroy 标记 preDestroy() 方法,表示当 Spring Boot 关闭前将会调用该方法。
ShutDownConfig 类的代码如下:package com.huangx.springboot.springboot_shutdown_demo1.config;
import com.huangx.springboot.springboot_shutdown_demo1.bean.TerminateBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ShutDownConfig {
@Bean
public TerminateBean getTerminateService() {
return new TerminateBean();
}
}
上面代码使用 @Configuration 和 @Bean 注解将 TerminateBean 配置到 Spring Boot,Spring Boot 关闭时才能调用它的 preDestroy() 方
法。
在下面介绍的几种关闭 Spring Boot 的方式中,仅仅只有 SpringbootShutdownDemo1Application 类代码实现不同。上面两个类的代码均是一致的,因此就不会赘述。
利用 Spring Boot 的 actuator
Spring Boot 自带监控功能 Actuator,可以帮助实现对程序内部运行情况监控,比如监控状况、Bean加载情况、环境变量、日志信息、线程信息等。我们将利用 Actuator 实现关闭 Spring Boot,如下:
(1)添加 actuator 的 maven 依赖,如下:
org.springframework.boot
spring-boot-starter-actuator
(2)默认情况下,actuator 的 shutdown 是禁用的,我们需要打开它。修改 application.properties 或 application.yml 文件,如下:# 配置远程关闭 SpringBoot
management.endpoint.shutdown.enabled=true
managemen