SpringBoot 项目打包部署

2022-09-13 17:37:49 浏览数 (1)

一、背景

SpringBoot 项目部署到服务器常见的方式就是,打包成 jar 包,通过 nohup java -jar 命令去运行项目,这也是官方推荐的一种方式。但是,每次项目代码修改更新的时候,重新打包上传服务器,覆盖原项目,需要把原来项目运行进程 kill ,再运行新的项目。这个过程是在有点繁琐。后面,网上查寻和学习了下脚本,决定整合一个脚本文件,简化项目部署过程。以下是整个教程!

二、详细步骤
2.1、打包项目

通过 IDEA 中 Maven 插件打包,先 clean 整个项目 然后 install。打包之前,先要排除单元测试类,避免把测试类也打包,这样也更快。POM.XML 中添加如下配置:

代码语言:javascript复制
<properties>
        <skipTests>true</skipTests>
	</properties>

或者直接写个maven 打包命令:clean package -DskipTests=true ,每次打包的时候点击 package 就可以了。

如果不想通过 IDEA 来打包,也可以直接通过 maven 打包命令来(全部环境通用),前提是已经安装过 maven:

代码语言:javascript复制
mvn install -Dmaven.test.skip=true
2.2、上传项目到服务器

我的是 win10 环境,使用的是 FileZilla 工具上传文件。很方便,操作也很直观,推荐使用。选中本地需要上传的项目,右击点击上传即可。

三、项目部署运行
3.1、部署多个SpringBoot项目

通过服务器如果需要部署多个spring-boot项目,端口不一样。那怎么通过域名来访问呢?这就需要 Nginx 来出手了,通过Nginx的反向代理实现。我博客之前也介绍过关于Nginx相关的(CentOS 下 配置Nginx 和相关使用配置),这里便不进一步说明了,直接给出 nginx.conf 的主要配置:

代码语言:javascript复制
server {
    listen       80; #nginx默认监听 80 端口
    server_name  www.xmlvhy.com; #这里添加自己服务器的域名或ip
    access_log logs/book.log;
    error_log logs/book.error;

    upstream spring-boot {
        server www.xmlvhy.com:8081;
    }

	upstream boot {
        server www.xmlvhy.com:8082;
    }

    #将/blog1请求转发给http://www.xmlvhy.com:8082 处理
    location /blog {
        proxy_pass http://spring-boot;
    }

	 location /blog1 {
        proxy_pass http://boot;
    }
	......
}

当然,项目配置文件中(application.properties)需要指定 context path 和端口:

代码语言:javascript复制
server.port=8081
server.servlet.context-path=/blog/

备注:

如果部署多个项目且不同端口,阿里云那边记得开放对应端口,另外每个项目最好都分好包,可以根据设置的context path 来分,再将所有的SpringBoot 项目都整理到一个文件夹,这样管理起来清晰明了!

3.2、SpringBoot项目启动脚本
代码语言:javascript复制
#!/bin/bash
#这里可替换为你自己的执行程序,其他代码无需更改
APP_NAME=blog.jar
#使用说明,用来提示输入参数
usage() {
    echo "Usage: sh 执行脚本.sh [start|stop|restart|status]"
    exit 1
}
#检查程序是否在运行
is_exist(){
  pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
  #如果不存在返回1,存在返回0     
  if [ -z "${pid}" ]; then
   return 1
  else
    return 0
  fi
}

#启动方法
start(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is already running. pid=${pid} ."
  else
    nohup java -jar $APP_NAME >> catalina.out 2>&1 &
  fi
}

#停止方法
stop(){
  is_exist
  if [ $? -eq "0" ]; then
    kill -9 $pid
  else
    echo "${APP_NAME} is not running"
  fi
}

#输出运行状态
status(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is running. Pid is ${pid}"
  else
    echo "${APP_NAME} is NOT running."
  fi
}

#重启
restart(){
  stop
  start
}

#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  *)
    usage
    ;;
esac

存放位置,我喜欢这样放:

脚本相关命令:

代码语言:javascript复制
sh springboot.sh start 启动服务
sh springboot.sh stop 停止服务
sh springboot.sh restart 重启服务
sh springboot.sh status 查看运行状态

以上,便完成了SpringBoot项目打包到部署脚本的教程!

参考学习链接:

代码语言:javascript复制
https://blog.csdn.net/lj1314ailj/article/details/80580233

本文作者: AI码真香

本文标题: SpringBoot 项目打包部署

本文网址: https://www.xmlvhy.com/article/73.html

版权说明: 自由转载-非商用-非衍生-保持署名 署名-非商业性使用4.0 国际 (CC BY-NC 4.0)

0 人点赞