为了账号安全,请及时绑定邮箱和手机立即绑定

如何以正确的方式关闭Spring Boot应用程序?

/ 猿问

如何以正确的方式关闭Spring Boot应用程序?

蝴蝶刀刀 2019-09-19 15:18:53

在Spring Boot Document中,他们说'每个SpringApplication都会向JVM注册一个关闭钩子,以确保在退出时优雅地关闭ApplicationContext。

当我单击ctrl+cshell命令时,可以正常关闭应用程序。如果我在生产机器中运行应用程序,我必须使用该命令 java -jar ProApplicaton.jar。但是我无法关闭shell终端,否则会关闭进程。

如果我运行命令nohup java -jar ProApplicaton.jar &,我不能使用ctrl+c优雅地关闭它。

在生产环境中启动和停止Spring Boot应用程序的正确方法是什么?


查看完整描述

3 回答

?
饮歌长啸

如果您正在使用执行器模块,则可以通过JMX或关闭应用程序来关闭应用程序HTTP(添加endpoints.shutdown.enabled=true到您的application.properties文件中)。


/shutdown - 允许应用程序正常关闭(默认情况下不启用)。


根据端点的暴露方式,敏感参数可用作安全提示。例如,敏感端点在访问时需要用户名/密码HTTP(如果未启用Web安全性,则只需禁用)。


从Spring启动文档


查看完整回答
反对 回复 2019-09-19
?
陪伴而非守候

关于@ Jean-Philippe Bond的回答,


这是一个maven快速示例,供maven用户配置HTTP端点,使用spring-boot-starter-actuator关闭弹簧启动Web应用程序,以便您可以复制和粘贴:


1.Maven pom.xml:


<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

2.application.properties:


#No auth  protected 

endpoints.shutdown.sensitive=false


#Enable shutdown endpoint

endpoints.shutdown.enabled=true

所有端点都列在这里:


3.发送一个post方法来关闭app:


curl -X POST localhost:port/shutdown

安全说明:

如果您需要auth保护的关闭方法,您可能还需要


<dependency>

  <groupId>org.springframework.boot</groupId>

  <artifactId>spring-boot-starter-security</artifactId>

</dependency>


查看完整回答
反对 回复 2019-09-19
?
动漫人物

这是另一个选项,不需要您更改代码或暴露关闭端点。创建以下脚本并使用它们来启动和停止您的应用程序。


start.sh


#!/bin/bash

java -jar myapp.jar & echo $! > ./pid.file &

启动您的应用并将进程ID保存在文件中


stop.sh


#!/bin/bash

kill $(cat ./pid.file)

使用保存的进程ID停止您的应用


start_silent.sh


#!/bin/bash

nohup ./start.sh > foo.out 2> foo.err < /dev/null &

如果您需要使用远程计算机或CI管道中的ssh启动应用程序,请使用此脚本来启动应用程序。直接使用start.sh可以让shell挂起。


例如。重新部署您的应用程序,您可以使用以下命令重新启动


sshpass -p password ssh -oStrictHostKeyChecking=no userName@www.domain.com 'cd /home/user/pathToApp; ./stop.sh; ./start_silent.sh'


查看完整回答
反对 回复 2019-09-19

添加回答

回复

举报

0/150
提交
取消
意见反馈 邀请有奖 帮助中心 APP下载
官方微信