java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot优雅关闭与降级

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

作者:张老师技术栈

还在为服务重启时请求中断和数据不一致烦恼吗?本文详解优雅关闭、手动降级和熔断降级的区别与实现,教你如何让应用处理完当前请求再停止,避免线上事故,需要的朋友可以参考下

发布新版本时如果直接 kill 进程,正在处理的请求会中断,数据可能不一致。优雅关闭让应用处理完当前请求再停止。

一、优雅关闭

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

二、手动降级

@Component
public class DegradeService {

    private final Map<String, Boolean> 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> T execute(String key, Supplier<T> supplier, T fallback) {
        if (isDegrade(key)) return fallback;
        return supplier.get();
    }
}

三、熔断降级

@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);
    }
}

到此这篇关于SpringBoot实现优雅关闭与降级的完整代码的文章就介绍到这了,更多相关SpringBoot优雅关闭与降级内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文