优雅的启动、停止、重启你的SpringBoot项目

摘要:
你是如何开始和结束SpringBoot项目的?使用shell脚本的第一种方法是编写相应的shell步骤来启动和关闭项目。大约56行:foriin{3..1}这是设置重新启动时的等待时间。由于某些项目可能无法在3秒内正常停止,因此可以将其调整为5秒,以确保应用程序确实正常停止,然后以第二种方式启动。如果你认为这足够优雅,那你就太天真了。如果你使用SpringBoot2.0或更高版本,你是幸运的。没有脚本,你可以变得优雅。

前言

你是如何启动、关闭你的SpringBoot项目的?还是使用java -jar xxxx.jar启动?
还在用ps -ef找到你的pid去kill你的应用吗?
让我们来看看还有什么更加优雅的一键启动关闭的方式。

第一种方式

使用shell脚本,就是编写相应的shell脚步去启动和关闭我们的项目。
脚本内容:https://github.com/LinkinStars/springBootTemplate/blob/master/app.sh
PS:本人不是专业运维,可能shell脚本不够规范,见谅~~

 

脚本的使用

首先,将你需要发布的jar包,和含有上述内容的脚本app.sh,上传至linux服务器,注意两者必须处于同一目录,并且该目录下只有一个jar包,并给与app.sh相应执行权限,chmod 777 app.sh

然后就可以执行脚本,命令如下

命令作用
./app.sh start启动应用
./app.sh stop关闭应用
./app.sh restart重启应用
./app.sh status查看应用状态
./app.sh stop -f强制kill应用进程

注意,重新发布应用时,先stop再上传jar包哦。

使用情况如图:
优雅的启动、停止、重启你的SpringBoot项目第1张

 

脚本中可以修改的地方:

19行左右: nohup java -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -Xms512M -Xmx4G -jar $appName > /dev/null 2>&1 &

这是最终jar的启动命令,在这里你需要对gc、Xms、Xmx等针对你机器的实际情况修改,还可以添加你所需要的启动参数等。

56行左右: for i in {3..1}

这里是设置restart的时候等待的时间,因为有的项目在3秒之内可能没有办法正常停止,所以可以调整为5秒,保证应用确实正常停止后再启动

第二种方式

如果你以为这样就足够优雅了,那你就太天真了,如果你使用的是SpringBoot2.0及以上的版本,那就有福了,不需要脚本也可以很优雅。

如何使用

首先你修改一下打包的方式:
如果你使用gradle构建的项目,在build.gradle文件中加入以下代码,打包时使用bootJar进行打包
bootJar {
     launchScript()
}
如果你使用maven进行构建的项目,添加下面的代码

<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <executable>true</executable>
    </configuration>
</plugin>

 打出来的jar文件非常神奇,在linux系统可以直接使用./app.jar这样类似于启动shell脚本一般的方式启动项目,你可以先尝试一下是否能这样启动,来保证后续步骤的正常。

第二步添加链接
在服务器上运行下面的命令:
$ sudo ln -s /var/myapp/myapp.jar /etc/init.d/myapp
其中【/var/myapp/myapp.jar】为你上传至服务器jar的绝对路径,一定要写全哦。
【/etc/init.d/myapp】里面的myapp可以修改为你自己想要的名称,后面会用到。

第三步启动
做完之后,你就可以使用service命令,像启动停止服务一样操作你的应用:

$ service myapp start
$ service myapp stop
$ service myapp status

测试效果如下:
[root@localhost ~]# service myapp start
Started [31624]
[root@localhost ~]# service myapp status
Running [31624]
[root@localhost ~]# service myapp stop
Stopped [31624]

其中会遇到的坑:

使用service myapp start命令后可能出现Unable to find Java.
使用ln -s /usr/local/jdk/bin/java /sbin/java命令来解决。
其中【/usr/local/jdk/bin/java】为你安装在服务器上jdk的目录
【/sbin/java】不需要修改
问题解决参考:https://github.com/spring-projects/spring-boot/issues/5690

总结

这样之后你想停止应用,不需要再像以前一样ps -ef找来找去了。
这对于之后的CICD,或者是docker化的你的应用等,都有一定的帮助。

参考博客:
https://segmentfault.com/a/1190000012030747
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#deployment-install

免责声明:文章转载自《优雅的启动、停止、重启你的SpringBoot项目》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇html中#include file的使用方法KEIL5.11安装小结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

形形色色的软件生命周期模型(1)——瀑布型、增量型

摘要:读大学时,我们曾经学习过不少软件生命周期模型,当时还不是很懂软件开发,你可能会觉得这些东西很新奇。在实际工作中,你会发现这些模型其实很难应用,与此同时你会接触到RUP、MSF等权威软件公司的生命周期模型。本文将向你介绍各种常见的软件生命周期模型及它们的优缺点,文章最后还会介绍吸取了各种模型优点的实用生命周期模型。 大纲: 1.瀑布型 2.增量型 3....

MATLAB相关快捷键以及常用函数

MATLAB快捷键大全 F1帮助F2改名F3搜索 F4地址 F5刷新F6切换F10菜单CTRL+A全选CTRL+C复制CTRL+X剪切CTRL+V粘贴CTRL+Z撤消CTRL+O打开SHIFT+DELETE永久删除DELETE删除ALT+ENTER属性ALT+F4关闭CTRL+F4关闭ALT+TAB切换ALT+ESC切换ALT+空格键窗口菜单CTRL+ES...

微信支付商户申请接入信息汇总【接入教程】

微信支付(商户功能)功能介绍 微信支付(商户功能),是公众平台向有出售物品需求的公众号提供推广销售、支付收款、经营分析的整套解决方案。 商户通过自定义菜单、关键字回复等方式向订阅用户推送商品消息,用户可在微信公众号中完成选购支付的流程。商户也可以把商品网页生成二维码,张贴在线下的场景,如车站和广告海报。用户扫描后可打开商品详情,在微信中直接购买。 场景及类...

MAC下使用Charles抓取安卓模拟器数据

一、安装Charles,这个不多记录 二、Charles数据乱码问题 启动 Charles 软件,在菜单中找到 Help -> SSL Proxying -> Install Charles Root Certificate. 如下图所示: 证书位置为登陆 随后双击证书,里面选择信任列表 在 Charles 的工具栏上点击设置按钮,选择 S...

详解如何实现在线聊天系统中的实时消息获取

序言 传统web浏览器应用采用客户端主动请求方式,只有在收到浏览器请求时服务端才返回消息,这种模式已经不能满足日益多样化的web应用需求,例如: 在线聊天系统:需要实时获取聊天消息。 实时监控系统:需要实时获取监控对象状态。如仪表读数、告警信息等。 随着html技术演进,发展出了多种服务器推送技术,用于服务器向浏览器客户端推送消息。 Ajax轮询 采用Aj...

局域网内手机访问电脑网站注意几点

一台Android手机和一台PC电脑,在同一个WiFi局域网内。PC上部署了IIS,可是Android手机无法访问PC上虚拟目录内的网页,如http://192.168.1.100/localhost/index.html(之前可以访问)。这可能是哪出了问题呢? 可能有以下几种可能:                              第一步,先用另...