为了更好的实现服务资源释放,包括数据库连接池,线程池,注销微服务等,因此要实现优雅停服,springboot actuator 开放了shutdown端口,可以自定义实现优雅停服,案例如下
public class GracefulShutDown implements TomcatConnectorCustomizer, ApplicationListener<ContextClosedEvent> {
private static final Logger logger = LoggerFactory.getLogger(GracefulShutDown.class);
private volatile Connector connector;
private final int waitTime = 1800;
@Override
public void customize(Connector connector) {
this.connector = connector;
}
/**
* 关闭资源
*/
@Override
public void onApplicationEvent(ContextClosedEvent contextClosedEvent) {
// tomcat 暂停对外服务
logger.info("暂停tomcat处理http请求...");
this.connector.pause();
logger.info("关闭容器资源...");
// 获取tomcat 线程池
Executor executor = this.connector.getProtocolHandler().getExecutor();
try {
if (executor instanceof ThreadPoolExecutor) {
ThreadPoolExecutor threadPoolExecutor &