游乐游手机版
首页/编程语言/文章详情

SpringBoot优雅关闭与降级完整代码实现

时间:2026-07-24 06:08
发布新版本时,配置graceful关闭与超时,等待当前请求处理完再停止。手动降级通过DegradeService维护开关,用ConcurrentHashMap动态控制,Controller暴露接口供运维触发降级或恢复。

在发布新版本时,如果直接终止进程,正在处理的请求将会中断,可能导致数据不一致。优雅关闭机制能够确保应用处理完当前请求后再停止,从而保障数据完整性。

SpringBoot实现优雅关闭与降级的完整代码

一、Spring Boot 优雅关闭配置

配置过程非常简单,只需在 application.yml 文件中添加以下两行配置即可实现优雅关闭:

server:
  shutdown: graceful
spring:
  lifecycle:
    timeout-per-shutdown-phase: 30s

当Spring Boot接收到停止信号后,会等待正在处理的请求全部完成(最长等待30秒),然后才真正退出进程。需要注意的是,timeout-per-shutdown-phase 参数可根据业务需求进行调整,如果某些请求处理时间较长,可以适当延长超时时间。

二、手动降级机制

降级的核心在于提供一个可动态控制的开关,能够随时决定某个功能是否启用兜底逻辑。以下 DegradeService 类是一个轻量级的实现,它使用 ConcurrentHashMap 存储降级规则,并通过 enableDegradedisableDegrade 方法实现动态切换。

@Component
public class DegradeService {

    private final Map degradeRules = new ConcurrentHashMap<>();

    public boolean isDegrade(String key) {
        return degradeRules.getOrDefault(key, false);
    }

    public void enableDegrade(String key) {
        degradeRules.put(key, true);
    }

    public void disableDegrade(String key) {
        degradeRules.put(key, false);
    }

    public  T execute(String key, Supplier supplier, T fallback) {
        if (isDegrade(key)) return fallback;
        return supplier.get();
    }
}

使用时,调用 execute 方法,传入业务逻辑和降级结果,一旦降级开启,直接返回 fallback,避免核心链路崩溃。

三、熔断降级接口

在实现手动降级之后,还需要一个对外暴露的接口来触发降级开关,以便运维人员或监控系统能够灵活调用。以下 Controller 提供了两个HTTP端点:

@RestController
public class DegradeController {

    @Autowired
    private DegradeService degradeService;

    @PostMapping("/degrade/enable")
    public ResultVO enable(@RequestParam String key) {
        degradeService.enableDegrade(key);
        return ResultVO.success("已开启: " + key);
    }

    @PostMapping("/degrade/disable")
    public ResultVO disable(@RequestParam String key) {
        degradeService.disableDegrade(key);
        return ResultVO.success("已关闭: " + key);
    }
}

通过这种方式,当线上出现异常或流量高峰时,可以发送请求 /degrade/enable?key=xxx 快速开启降级,待系统恢复正常后再调用 /degrade/disable 关闭降级。结合优雅关闭机制,能够有效应对大部分发布和故障场景。

来源:https://www.jb51.net/program/367694lb1.htm
上一篇私有化部署GitLab分支受保护规则与LDAP用户组权限绑定 下一篇Debian安装最新版Golang的完整教程
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
FileZilla断点续传设置与操作指南
编程语言 · 2026-07-25

FileZilla断点续传设置与操作指南

FileZilla支持断点续传,需客户端与服务器均开启REST命令。设置中确保启用断点续传及继续传输选项。中断后自动或手动从断点恢复。注意服务器支持、传输模式匹配及文件完整性校验。

Debian系统C++编译器位置查找方法
编程语言 · 2026-07-25

Debian系统C++编译器位置查找方法

在Debian系统中,通过apt安装的C++编译器g++默认位于 usr bin g++,可使用which或whereis命令验证路径。g++属于build-essential软件包,若未安装则需执行sudoaptinstallbuild-essential。该包还包含gcc、make等编译工具链,g++是GNUC++编译器,实际是符号链接指向具体版本,验证

Debian系统安装C++环境的方法
编程语言 · 2026-07-25

Debian系统安装C++环境的方法

在Debian系统安装C++开发环境:先sudoaptupdate更新包列表,再sudoaptinstallbuild-essential安装编译工具链,或单独安装g++。用g++--version验证。可选安装VSCode、GDB、CMake等工具并配置默认编译器版本。

Debian系统C++开发环境配置指南
编程语言 · 2026-07-25

Debian系统C++开发环境配置指南

在Debian系统中,先执行aptupdate更新软件包列表,再安装build-essential元包即可获得GCC、G++、Make和GDB。通过运行g++--version命令验证编译器安装成功。可选安装VisualStudioCode、CLion等编辑器及CMake构建工具,并编写一个简单的HelloWorld程序,使用g++编译运行以验证环境配置正确

通过cpustat工具查看CPU状态的具体方法与详细步骤
编程语言 · 2026-07-25

通过cpustat工具查看CPU状态的具体方法与详细步骤

cpustat是sysstat包中的CPU监控工具,可按固定间隔输出带时间戳的CPU使用率统计。安装后运行cpustat即可实时显示各核心信息,常用指标包括%usr、%sys、%iowait、%steal和%idle,用于定位用户态、内核态或I O瓶颈。高级选项-c可显示单核统计,-m可同时查看内存使用,适合脚本采集和性能分析。