前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何优雅的关闭Spring Boot程序

如何优雅的关闭Spring Boot程序

原创
作者头像
海风极客
发布2023-11-03 21:23:16
2000
发布2023-11-03 21:23:16
举报
文章被收录于专栏:扯编程的淡扯编程的淡

1 先说下不优雅的关闭方式

先查询Spring Boot程序的PID,然后再kill -9 PID,像下面一样

代码语言:shell
复制
[root@iZ1608aqb7ntn9Z ~]# ps -ef|grep java
root       46858       1  0 5月02 ?       01:32:25 /usr/local/jdk1.8.0_141/bin/java......
root      785288  785269  0 14:36 ?       00:00:11 /usr/local/......
[root@iZ1608aqb7ntn9Z ~]# kill -9 46858 
[root@iZ1608aqb7ntn9Z ~]# ps -ef|grep java
root      785288  785269  0 14:36 ?       00:00:11 /usr/local/......

这种方式的坏处:

首先kill -9 的命令类似于直接断电,当然除了直接终止程序正在执行的任务导致数据丢失以外,在单体环境下该命令没有太大的坏处,但是在分布式环境下就大不同了。

例如下图所示:将App2进行关闭后,再分布式注册中心中App2并没有直接被清除,这就导致了服务消费者还有可能去调用App2的接口进而导致报错,除此以外,在分布式事务中异常关闭系统也可能造成很不好的影响。

在这里插入图片描述
在这里插入图片描述

2 再来说下如何优雅的关闭

依赖:

代码语言:html
复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

配置文件:

代码语言:text
复制
server.port=8443
#启用shutdown
management.endpoint.shutdown.enabled=true
management.endpoints.web.exposure.include=*
# 自定义管理端点的前缀(保证安全) http://127.0.0.1:[port]/MyActuator/shutdown
management.endpoints.web.base-path=/MyActuator
# 自定义端口
management.server.port=18443
# 不允许远程管理连接(不允许外部调用保证安全)
management.server.address=127.0.0.1

配置类:

代码语言:java
复制
/**
 * @desc: ShutDownConfig
 * @author: YanMingXin
 * @create: 2021/8/4-16:16
 **/
@Configuration
public class ShutDownConfig {

    @Bean
    public ShutDownConfig getTerminateBean() {
        return null;
    }

    @PreDestroy
    public static void preDestroy() {
        System.out.println("This spring application is destroyed");
    }

}

效果:

命令行输入:curl -X POST http://127.0.0.1:18443/MyActuator/shutdown

在这里插入图片描述
在这里插入图片描述

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 先说下不优雅的关闭方式
  • 2 再来说下如何优雅的关闭
相关产品与服务
微服务引擎 TSE
微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档