优雅的启动、停止、重启你的SpringBoot项目
前言
你是如何启动、关闭你的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包哦。
使用情况如图:

脚本中可以修改的地方:
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项目的更多相关文章
- Linux Systemd——在RHEL/CentOS 7中启动/停止/重启服务
RHEL/CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理.systemd兼容SysV和Li ...
- 批处理命令行CMD启动停止重启IIS的命令
原文:批处理命令行CMD启动停止重启IIS的命令 启动IIS: net start iisadmin (IIS的整个服务) net start w3svc (WWW网页WEB服务) ...
- 在CentOS 7中启动/停止/重启服务
RHEL/CentOS 7.0中一个最主要的改变,就是切换到了systemd.它用于替代红帽企业版Linux前任版本中的SysV和Upstart,对系统和服务进行管理.systemd兼容SysV和Li ...
- linux如何启动/停止/重启MySQL
如何启动/停止/重启MySQL 一.启动方式 1.使用 service 启动:service mysqld start2.使用 mysqld 脚本启动:/etc/inint.d/mysqld star ...
- Linux编辑启动停止重启springboot jar包脚本
springboot的配置文件中,配置文件的名字都有各自的意义跟用途 dev 开发环境 prod 生产环境(默认) test 测试环境 加载指定配置文件 --spring.profiles.activ ...
- Linux shell脚本启动 停止 重启jar包
最近做的微服务jar包想弄在持续集成中自动化部署,所以首先得有一个操作jar包的脚本 只需将jar文件的路径替换到APP_NAME的值就可以了,其他不用改 注意:window编辑的shell文件,通过 ...
- Linux启动/停止/重启Mysql数据库的方法
1.查看mysql版本 方法一:status; 方法二:select version(); 2.Mysql启动.停止.重启常用命令 a.启动方式 1.使用 service 启动: [root@loca ...
- Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’解决方法 + Linux启动/停止/重启Mysql数据库的方法
启动mysql 报错: ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/m ...
- Linux启动/停止/重启Mysql数据库的方法——转载
Mysql启动.停止.重启常用命令 a.启动方式1.使用 service 启动:[root@localhost /]# service mysqld start (5.0版本是mysqld)[root ...
随机推荐
- anaconda 命令集合
0.安装 $ bash ~/Downloads/Anaconda3-5.3.1-MacOSX-x86_64.sh source ~/.bash_profile 1.查看 anaconda 的版本 co ...
- 如何快速求解第一类斯特林数--nlog^2n + nlogn
目录 参考资料 前言 暴力 nlog^2n的做法 nlogn的做法 代码 参考资料 百度百科 斯特林数 学习笔记-by zhouzhendong 前言 首先是因为这道题,才去研究了这个玩意:[2019 ...
- HFS 轻量化 的文件服务器
国外的工具 国内的工具
- 2018-4-5-cadence skill
skill 是 Cadence 提供的二次开发语言,可以做很多有用的二次开发. 开发参考手册:<algroskill><sklangref><sklanguser> ...
- lua 文件编译相关工具
-- 编译一个代码文件 -- loadfile (lua_State *L, const char *filename); -- 将一个文件加载为lua代码块,仅编译不执行,返回值为编译后的 -- 代 ...
- iOS 开发中keyChain的使用
我们开发中很多数据都是直接存储到本地沙盒中的,这样当应用程序被卸载后,本地的数据都会被删除.如果我们不想让数据在卸载程序的时候丢失,我们可以用KeyChain来存储我们想要的数据.苹果提供了原生的一套 ...
- 推荐一些iOS博客
公司性质的: 公司 地址 美团 http://tech.meituan.com/archives 个人博客: 博主 地址 (斜体的技术文章较少) 王巍(onevcat) https://onevcat ...
- Jmeter之Non HTTP response code: java.net.SocketException/Non HTTP response message: Permission denied: connect
最近在做性能测试过程中遇到了高并发时,后台监控各项指标都很正常,但是测试结果中很多Non HTTP response code: java.net.SocketException/Non HTTP r ...
- Spring源码工程导入Eclsipse缺少两个jar文件
按照<Spring源码深度解析>所述,使用gradle cleanidea eclipse将Spring源码转为eclipse工程后,导入eclipse,最后发现还是缺少spring-cg ...
- 教你 Debug 的正确姿势——记一次 CoreMotion 的 Crash
作者:林蓝东 最近的一个手机 QQ 版本发出去后收到比较多关于 CoreMotion 的 crash 上报,案发现场如下: 但是看看这个堆栈发现它完全不按照套路出牌啊! 乍一看是挂在 CoreMoti ...