Spring Boot2.x 优雅停机

发布时间 2024-01-10 11:35:50作者: 夏秋初

参考

环境

环境 版本 说明
Windows 10
VS Code 1.85.1
Spring Boot Extension Pack v0.2.1 vscode插件
Extension Pack for Java v0.25.15 vscode插件
JDK 11
Spring Boot 2.3.12.RELEASE

正文

准备

Spring Boot 2.3 + 新增内置功能,无需添加依赖。

  1. 修改 application.properties
#开启优雅停机,默认是立即停机IMMEDIATE
server.shutdown=graceful
#缓冲器即最大等待时间
spring.lifecycle.timeout-per-shutdown-phase=20s
  1. IndexController.java 测试。
package com.xiaqiuchu.demo.controller;

import org.springframework.web.bind.annotation.RestController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Slf4j
@RestController
@RequestMapping("/")
public class IndexController {

    @RequestMapping(value = "index", method=RequestMethod.GET)
    public String index() throws InterruptedException {
        log.info("收到新请求");
        // 模拟业务耗时处理流程
        Thread.sleep(15 * 1000L);
        //
        return "hello";
    }
}

测试

  1. 运行项目,浏览器访问一次,然后 windows 下 Ctrl+c, linux 下执行 kill -2,再次访问。
  2. 测试得知,已存在的请求将会继续执行并正常返回(超出设置的等待时间则会强制结束),新请求会超时(不会进入控制器)。