Spring Boot jar包linux服务器部署
Spring Boot 部署
一.使用命令行java -jar 常驻
nohup java -jar spring-boot-1.0-SNAPSHOT.jar > log.file 2>&1 &
其中spring-boot-1.0-SNAPSHOT.jar
为上传的jar包名
关闭通过ps -aux | grep spring 找到pid.用kill -9 [pid]结束进程
二.使用Linux服务的方式启动、停止、重启
1、首先在 pom.xml 中配置插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>
特别注意一下 <executable>true</executable>
2、然后正常使用 mvn clean package -Dmaven.test.skip=true 将工程打成jar包
3、上传jar包到服务器,假设部署路径为 /var/apps/myapp.jar ,使用命令做一个软连接到 /etc/init.d 目录,命令:
ln -s /var/apps/myapp.jar /etc/init.d/myapp
其中 /etc/init.d/myapp
最后的 myapp 可以是别的名字,这个就是服务名,我们后面使用 service [服务名] start
来启动(下面有说明)。
4、给jar文件授予可执行权限,命令:
chmod +x myapp.jar
5、接下来,就可以使用我们熟悉的 service myapp start|stop|restart|status
来对应用进行启停了。
执行命令后将得到形如 Started|Stopped [PID] 的结果反馈。
默认PID文件路径:/var/run/appname/appname.pid
默认服务日志文件路径:/var/log/appname.log
(可以通过下面.conf 的方式修改LOG_FOLDER)
6、使用自定义的.conf文件来变更默认配置,方法如下:
在jar包相同路径下创建一个.conf文件,名称应该与.jar的名称相同,如myapp.conf(如果我们打包的文jar文件为 myapp-1.0.0.jar 那么这里的conf文件也应该是 myapp-1.0.0.conf),其内容配置可以如下:
JAVA_HOME=/usr/local/jdk
JAVA_OPTS=-Xmx1024M
LOG_FOLDER=/data/logs/myapp
注:LOG_FOLDER 对应的文件夹目录要必须存在,如果目录不存在,服务并不会自从创建目录。
华丽丽的分割线
如果你是CentOS 7或红帽7以上,你还可以用下面的方法处理,为什么要用这样的方法(请自行研究),这里直接提供结果,哈哈
编辑服务文件 vim /usr/lib/systemd/system/myapp.service
[Unit]
Description=frbao-publicity
After=network.target
[Service]
WorkingDirectory=/var/apps/myapp
ExecStart=/usr/local/java/bin/java -Dsun.misc.URLClassPath.disableJarChecking=true -jar /var/apps/myapp.jar
ExecStop=kill $MAINPID
Restart=always
[Install]
WantedBy=multi-user.target
使用Linux 7 以后服务新的启动方式,相关命令
启动
systemctl start myapp
停止
systemctl stop myapp
重启
systemctl restart myapp
查看日志
journalctl -u myapp
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构