背景
以前多使用tomcat容器部署war项目或者使用jenkins直接部署,没有亲自体验过部署jar。所以,这次接触了一个SpringBoot项目之后直接采用jar部署的方式试试水,然后就挂了。。
过程
首先控制台运行java -jar -Dserver.port=8090 xx.jar & 后台运行程序,看了一下日志也能正常输出以为就大功告成了。不料高兴不到2h,程序就挂了。
2021-02-25 10:10:51.993 INFO 5392 --- [ Thread-3] o.s.s.c.ThreadPoolTaskScheduler : Shutting down ExecutorService 'threadPoolTaskScheduler'
2021-02-25 10:10:51.994 INFO 5392 --- [ Thread-3] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2021-02-25 10:10:51.996 INFO 5392 --- [ Thread-3] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
看了下报错(如上图),以为是数据库连接池问题,然后检查了application.yml配置,结果跟其它boot项目的配置都一样啊。初步诊断无果之后,开始一顿百度+尝试。
终于,男主光环照耀下,迎来大结局。我在控制台运行java -jar xx.jar & 以为可以脱离终端后台运行,实际还是受控制台影响,当控制台超时自动断开连接,程序也随之挂掉。
解决方案一
控制台输入改为
nohup java -jar -Dserver.port=8090 xx.jar > xx.log 2>&1 &
使用nohup不挂断运行,并指定日志输出。
解决方案二
把启动命令
java -jar -Dserver.port=8090 xx.jar &
写到shell脚本里面,执行shell来运行就没问题,日志会自动输出到当前目录的 nohup.out 文件中。
总结
日常踩坑,永无止境。
想起了一个大佬说过的话,你知道的越多,你不知道的就越多。