如何在SpringBoot中实现优雅关闭

❃博主首页 : 「码到三十五」 ,同名公众号 :「码到三十五」,wx号 : 「liwu0213」
☠博主专栏 : <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关>
♝博主的话 : 搬的每块砖,皆为峰峦之基;公众号搜索「码到三十五」关注这个爱发技术干货的coder,一起筑基

本文中,一起研究下Spring Boot提供的开箱即用功能之一:“优雅关闭”。

在了解什么是优雅关闭和如何关闭之前,了解我们需要处理优雅关闭的不同情况非常重要。

正常关机的要求

SpringBoot应用程序的关闭可以是崩溃,也可以是手动关闭的。

你可能想知道我们什么时候需要手动关闭它。此要求出现在许多事件中,其中包括:

  • 当我们因任何维护活动而关闭服务时。
  • 当我们执行更新部署时。

上述情况下,要么终止进程,要么使用Spring Boot Actuator 提供的关闭方法实现进程终止。

什么是优雅关闭

Shutdown、Crash 和 Graceful 之间的区别在于,它控制决定了我们可以用这个事件做什么。按照我们的期望,Spring Boot应该为我们提供一种处理此事件的方法,这样我们就可以确保良好的资源管理(清理资源、释放锁和连接)。

让我们看看 Spring Boot 提供什么。

实现优雅关机

Spring Boot 2.3 版在 application.properties 中引入了一些设置,有助于实现优雅关闭。让我们看看这些属性。

# application.properties
server.shutdown = graceful

使用此设置,当停止服务器时,它将不会接受新请求,从而确保关闭过程顺利进行。默认情况下,它将等待 30 秒以等待任何待处理的请求完成。

可以控制这个时间吗?Spring Boot 提供了另一个属性,我们可以用它来控制关机过程的时间量。

#application.properties
spring.lifecycle.timeout-per-shutdown-phase=1m

通过此设置,Spring Boot 将等待 1 分钟才完成关闭过程。

让我们看看如何向SpringBoot 应用程序添加关闭方法。

启用关闭方法

需要添加以下依赖来为 Spring Boot 应用程序启用执行器。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

通过actuator,SpringBoot应用程序的用户可以获得一种 POST方法,可用于启动关闭过程。

除此之外,我们还需要添加以下 application.properties 来启用端点。默认情况下,出于安全原因,执行器端点是禁用的。

#启用和暴露执行器关闭端点的属性
management.endpoint.shutdown.enabled=true 
management.endpoints.web.exposure.include=info,health,shutdown

到目前为止,我们已经了解了如何使用 Spring Boot 应用程序实现正常关闭。最后一点,我想谈谈另一个案例,即处理关闭事件。

处理关闭事件
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

@Component
public class ShutdownListener implements ApplicationListener<ApplicationEvent> {

    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        if (event instanceof ContextClosedEvent) {
            // Handle shutdown event
            System.out.println("Application is shutting down...");
            // Perform cleanup tasks or any necessary operations before shutdown
        }
    }
}

目前就这些了,希望在下一篇文章中见到你。


关注公众号[码到三十五]获取更多技术干货 !

  • 17
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码到三十五

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值