如何优雅的关闭Spring Boot程序

简介: 如何优雅的关闭Spring Boot程序

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

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

[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 再来说下如何优雅的关闭

依赖:

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

配置文件:

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

配置类:

/**
 * @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


相关文章
|
21天前
|
前端开发 Java 数据库连接
Spring系列文章1:Spring入门程序
Spring系列文章1:Spring入门程序
|
1天前
|
Java 应用服务中间件 Maven
第一个Spring Boot程序
第一个Spring Boot程序
5 0
|
8天前
|
存储 JSON 前端开发
利用Spring MVC开发程序2
利用Spring MVC开发程序
17 1
|
8天前
|
设计模式 JSON 前端开发
利用Spring MVC开发程序1
利用Spring MVC开发程序
20 0
|
21天前
|
安全 Java 应用服务中间件
Spring Boot 实现程序的优雅退出
Spring Boot 实现程序的优雅退出
|
21天前
|
前端开发 Java 数据库
基于Springboot的漫画网站22(程序+数据库+论文)可帮忙远程调试
基于Springboot的漫画网站22(程序+数据库+论文)可帮忙远程调试
|
21天前
|
Java 关系型数据库 MySQL
基于springboot+vue网吧管理系统(程序+数据库+文档)
基于springboot+vue网吧管理系统(程序+数据库+文档)
|
21天前
|
搜索推荐 Java 数据库
基于springboot+vue网上图书商城(程序+数据库+文档)
基于springboot+vue网上图书商城(程序+数据库+文档)
|
21天前
|
Java 关系型数据库 数据库
基于SpringBoot大药房管理系统(程序+数据库+文档)
基于SpringBoot大药房管理系统(程序+数据库+文档)
|
21天前
|
JavaScript Java 数据库
基于springboot的地方美食分享网站(程序+数据库+文档)
基于springboot的地方美食分享网站(程序+数据库+文档)