springboot怎么杀进程_SpringBoot:停掉应用服务几种方法

原标题:SpringBoot:停掉应用服务几种方法

前言

在生产环境下管理Spring Boot应用的生命周期非常重要。Spring容器通过ApplicationContext处理应用服务的所有的beans的创建、初始化、销毁。

本文着重于生命周期中的销毁阶段的处理,我将使用多种方式来实现关闭Spring Boot应用服务。如果你需要了解关于Spring Boot更多内容,请看我之前写过的文章和精品合辑!

一、通过Actuator Shutdown 端点服务

Spring Boot Actuator是一个主要用于应用指标监控和健康检查的服务。可以通过Http访问对应的Endpoint来获取应用的健康及指标信息。另外,它还提供了一个远程通过http实现应用shutdown的端点。

首先,我们要在Spring Boot中引入Actuator。

6a3b49344811b868535cf97726785b33.png

生产环境通常出于安全考虑,不能将应用关闭的访问完全公开,我们还要引入spring-boot-starter-security。具体的安全配置,请参考学习Spring security,在此不多做叙述!

c3d91fb67dd37f36accc5c74ba3327bb.png

默认情况下,出于安全考虑shutdown端点服务是处于关闭状态的,我们需要通过配置开启:

e904e35868ccc684354ca68907a84ebb.png

至此,我们就可以通过发送一个Post请求,来停掉Spring Boot应用服务。

bfbb1897494c6918e03846a4f3e57ee7.png

这种方法的缺陷在于:当你引入Actuator的shutdown服务的时候,其他的监控服务也自动被引入了。

二、 关闭Application Context

我们也可以自己实现一个Controller开放访问端点,调用Application Context的close方法实现应用服务的关闭。

616856e554ebcd974e43495418d5499f.png

我们添加了一个Controller继承自ApplicationContextAware接口,并且重写了setApplicationContext方法获取当前的应用上下文。然后在Post请求方法中调用close方法关闭当前应用。这种实现的方法更加轻量级,不会像Actuator一样引入更多的内容。我们同样可以通过发送Post请求,实现应用的关闭。

1c28551220aeee9e9472acb39ee11130.png

同样,当你对外开放一个关闭服务的端点,你要考虑它的权限与安全性

四、退出 SpringApplication

还可以通过SpringApplication 向JVM注册一个 shutdown 钩子来确保应用服务正确的关闭。

9e0ab90be11241d157375a6413dfa9f2.png

同样的效果,使用Java 8 lambda可以这样实现,代码简单很多:

SpringApplication.exit(ctx, () - 0);

五、kill杀掉应用进程

我们还可以使用bat或者shell脚本来停止应用的进程。所以,我们首先在应用启动的时候,要把进程ID写到一个文件里面。如下所示:

f269b63aced9a1793bf0bb5220d60ea1.png

创建一个shutdown.bat脚本,内容如下:

kill $(cat ./bin/shutdown.pid)

然后调用这个脚本就可以把应用服务进程杀死。返回搜狐,查看更多

责任编辑:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值