SpringBoot项目部署+后台持续运行

最近在写SpringBoot项目和学习Linux,在项目部署的过程中遇到了一些问题,特以此文章进行记录,希望可以帮助更多人少走一些弯路;

服务器通常是Linux系统,虽然部署的过程是有一步又一步的步骤所组成,我们可以借助搜索和chatgpt快速推进和遇到的解决问题,但我们还是需要掌握Linux的基础知识和指令,以快速推测导致问题的原因。

以下文章围绕着SpringBoot项目开发部署过程中的重要步骤和可能遇到的问题展开。

数据库的部署

在需求文档、项目原型图确定以后,前端和后端开始对接口,写接口文档。这时候,后端就需要根据项目的实际需求,构思ER图,建立数据库。这时候我们就需要思考一个问题,在程序的开发环节,多名后端开发人员是独自使用本地的数据库,还是使用一个共享的数据库?答案是人员少,方便管理的情况下,可以使用共享的数据库,因为这样就不需要每一名开发人员都在自己的电脑上运行同一份sql脚本和模拟假数据了。人多不方便管理,可以考虑小批共享数据库和使用本地数据库。

在我们的项目中,由于后端开发人员较少,所以直接使用共享数据库。将数据库直接部署到服务器上,建立多名操作数据库的用户,授予不同的权限进行管理。

数据库部署请查阅这篇文章数据库部署

SpringBoot项目部署

1.在服务器上下载jar,配置环境变量

由于我们的SpringBoot使用的是3.0.5,需要JDK17进行支持,所以以JDK17的下载和配置为例。

官网下载jdk-17_linux-x64_bin.tar.gz linux版本的JDK17压缩包,通过Xftp(文件传输工具)将下载的压缩包上传到服务器上面,解压到任意目录,这里我是解压到/opt/develop/目录下,具体步骤如下:

  1. 解压缩JDK安装文件
tar -zxvf jdk-8u351-linux-x64.tar.gz -C /opt/develop/
  1. 配置JDK的软链接(替换Linux系统中自带Java程序的软链接使用)
ln -s /export/server/jdk1.8.0_351 /opt/develop/jdk
  1. 配置JAVA_HOME环境变量,以及将$JAVA_HOME/bin文件夹加入PATH环境变量中
# 编辑/etc/profile文件,在文件的最下方进行配置
export JAVA_HOME=/export/server/jdk
export PATH=$PATH:$JAVA_HOME/bin

配置JDK环境变量

  1. 执行 /etc/profile文件,使配置的环境变量生效
source /etc/profile
  1. 配置java执行程序的软链接
# 删除系统自带的java程序
rm -f /usr/bin/java
# 软链接我们自己安装的java程序
ln -s /export/server/jdk/bin/java /usr/bin/java
  1. 执行验证
which java //看命令执行的路径是否是/usr/bin/java
java -version//看JDK版本是否同我们安装的版本一致

2.运行SpringBoot项目的jar包

由于SpringBoot工程内置轻量的服务器,使我们可以直接通过java -jar运行,因此我们不需要额外下载第三方的Web服务器,如nginx;将我们的命令进行打包(先clean,再package)
打包流程

将我们打包好的项目jar包通过Xftp或者其他传输软件,上传到服务器。

java -jar /opt/SpringBootProject/CAP-1.0-SNAPSHOT.jar //将位置替换成你的

如果在运行的时候出现端口占用的情况,导致项目不能正常启动,我们需要查看那一个进程占用我们项目启动的端口,来决定关闭占用端口的进程还是更换我们项目启动的端口

先使用netstat -nlp | grep 8080(替换为你项目使用的端口)命令查看什么进程占用了端口,我们发现是9018进程占用了我们的端口,再使用ps -ef | grep 9018 查看9018进程的详细信息,我们发现是一个jar的项目,此时我们可以直接选择kill -9 9018进程或者更改SpringBoot项目中的port配置
查看端口占用情况

3.SpringBoot项目持续运行

此时虽然我们可以在服务器上运行自己的SpingBoot项目和解决部署过程中的一些简单问题。但是我们会发现,一旦我们退出服务器或者关闭当前bash命令窗口,我们的SpringBoot项目就无法进行正常的访问。

原因:我们在bash窗口中通过java -jar 启动 Spring Boot 项目,该进程会被分配到该终端会话所在的进程组中。如果我们关闭了终端,该进程组也会被关闭,导致运行项目的进程也一并被终止。可以通过下图中的命令进行摸排。
当前bash进程组

思路:是否存在一种方法,将我们的项目向守卫进程(服务)一样在后台持续运行,就比如防火墙的服务。也就是说,我们需要想办法,把由进程启动项目变为由服务启动项目

解决:使用systemd服务来让Spring Boot项目一直运行,我们需要创建一个systemd服务单元文件并进行配置。下面是详细的步骤:

  1. 创建服务单元文件: 在Linux系统中,打开一个文本编辑器,并创建一个名为your-application.service的文件。将 your-application 替换为您的应用程序名称。
  2. 编辑服务单元文件: 将以下内容添加到服务单元文件中:
[Unit]Description=Your Application
After=syslog.target

[Service]User=<your_user>
WorkingDirectory=/path/to/your/application
ExecStart=/usr/bin/java -jar your-application.jar
SuccessExitStatus=143Restart=always

[Install]WantedBy=multi-user.target

注意替换以下内容:

  1. <your_user>:将其替换为您要运行应用程序的用户。
  2. /path/to/your/application:将其替换为您的应用程序所在的路径。
  3. your-application.jar:将其替换为您的应用程序的JAR文件名称。
  4. 其他地方不要进行更改。

3 . 保存服务单元文件: 将服务单元文件保存到/etc/systemd/system/目录下。请确保使用管理员权限保存文件。
Plain rm your-application.service文件的位置 /etc/systemd/system/
4. 设置文件权限: 执行以下命令以确保服务单元文件具有正确的权限:

sudo chmod 644 /etc/systemd/system/your-application.service
  1. 设置开启自启用该服务:
sudo systemctl enable your-application
  1. 启动服务:
sudo systemctl start your-application
  1. 验证服务状态:
sudo systemctl status your-application

如果一切正常,服务运行的状态如下:

启动成功

现在,Spring Boot项目已经可以通过systemd服务在Linux系统中持续运行。您可以使用systemctl命令来管理和控制应用程序的状态,例如停止、重启或查看日志等。

  • 26
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值