如何优雅的关闭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

网络异常,图片无法展示
|


相关文章
|
12天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的外卖程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的外卖程序的详细设计和实现(源码+lw+部署文档+讲解等)
|
8天前
|
缓存 NoSQL Java
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
57 5
|
8天前
|
运维 Java 关系型数据库
Spring运维之boot项目bean属性的绑定读取与校验
Spring运维之boot项目bean属性的绑定读取与校验
13 2
|
8天前
|
存储 运维 Java
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
19 2
|
7天前
|
Java Maven
springboot项目打jar包后,如何部署到服务器
springboot项目打jar包后,如何部署到服务器
25 1
|
8天前
|
XML 运维 Java
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
13 1
|
11天前
|
Java
基于SpringBoot的餐厅会员管理信息系统【程序资源下载】
基于SpringBoot的餐厅会员管理信息系统【程序资源下载】
8 1
|
12天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的垃圾分类的程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的垃圾分类的程序的详细设计和实现(源码+lw+部署文档+讲解等)
|
13天前
|
前端开发 Java 应用服务中间件
Spring框架第六章(SpringMVC概括及基于JDK21与Tomcat10创建SpringMVC程序)
Spring框架第六章(SpringMVC概括及基于JDK21与Tomcat10创建SpringMVC程序)
|
19天前
|
Java Maven Spring
第一个Spring程序(代码篇)
第一个Spring程序(代码篇)
13 1