当使用Spring Boot结合Maven构建单体应用时,正确的项目打包配置至关重要。
第一步:更新 pom.xml 配置文件
在项目的 pom.xml 文件中,确保您有正确的 配置块。这个配置块不仅指定了资源文件的处理方式,还包含了Spring Boot Maven插件的配置,该插件负责将应用打包为一个可执行的jar文件。
以下是一个典型的 配置示例:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 若需热加载,取消以下注释 -->
<!--<fork>true</fork>-->
<!-- 支持静态文件热部署 -->
<addResources>true</addResources>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
注意:确保 目录指向 src/main/resources,而非 src/main/java,因为后者默认已被Maven处理。
第二步:使用Maven构建项目
在配置了 pom.xml 之后,您可以使用Maven的以下命令来清理、编译并打包您的应用:
- 清理项目:mvn clean
- 安装并打包:mvn install
确保这两个步骤都执行无误,之后您的应用应该能够被打包成一个名为 target/your-app-x.y.z.jar 的可执行jar文件。您可以使用 java -jar 命令来运行它,如下:
java -jar target/your-app-x.y.z.jar
以上步骤能帮助您确保单体Spring Boot应用的Maven构建和打包过程正确无误。
部署方式一(命令行方式):
- 定位生成的jar文件
在部署前,通过日志文件确认最新构建的jar包的文件路径。
- 停止服务并清理旧版本
如果是更新部署,需要先停止当前运行的服务。以下是停止服务的步骤:
找到正在监听的端口以及对应的进程:
netstat -tulnp | grep 端口号
ps -ef | grep java
根据获取到的进程号终止进程:kill -9 进程号
删除或备份服务器中的旧版本项目文件。如需保留日志文件,请根据实际需求进行处理。
- 上传新的jar包
使用WinSCP或其他SSH文件传输工具,将新的jar包文件从开发环境上传到服务器的指定部署目录。
- 启动服务
在服务器上运行以下命令以启动项目:nohup java -jar xxx.jar > /dev/null 2>&1 &
nohup 命令用于在退出终端后继续运行命令,& 将命令放入后台执行。
- 管理后台任务
使用以下命令将正在前台执行的任务放入后台:
挂起命令:Ctrl + z
然后使用 bg 命令恢复挂起的任务在后台继续运行。
结束前台命令:Ctrl + c
该命令会强制终止当前正在前台运行的命令。
确保使用Ctrl + z后再通过bg命令来确保任务在后台继续运行。避免使用Ctrl + c,因为这将会中断并结束当前正在执行的程序。
部署方式二(Shell 脚本):
使用 vim 编写 Linux shell script,或者在 Windows 环境下编辑好,然后拷贝文件到 Linux 下。均可。
#!/bin/bash
APP_NAME=$2
PROFILE=$3
usage() {
echo "------"
echo "Invalid usage!"
echo "Usage: $0 [start|stop|restart|status] <app-name>.jar [dev|test|prod]"
echo "------"
exit 1
}
# 检查应用是否在运行
is_exist() {
pid=$(pgrep -f "$APP_NAME.*java -jar")
if [ -z "$pid" ]; then
return 1
else
echo "---"
echo "[$APP_NAME] - [$PROFILE] is running. PID is [$pid]."
echo "---"
return 0
fi
}
# 启动应用
start() {
is_exist
if [ $? -eq 0 ]; then
echo "[$APP_NAME] - [$PROFILE] is already running. PID=[$pid]."
else
nohup java -jar -Xms128M -Xmx512M "$APP_NAME" --spring.profiles.active="$PROFILE" >/dev/null 2>&1 &
echo "[$APP_NAME] - [$PROFILE] started successfully."
fi
}
# 停止应用
stop() {
is_exist
if [ $? -eq 0 ]; then
kill -9 "$pid"
echo "[$APP_NAME] - [$PROFILE] stopped."
else
echo "[$APP_NAME] - [$PROFILE] is not running."
fi
}
# 显示应用状态
status() {
is_exist
if [ $? -eq 0 ]; then
echo "[$APP_NAME] - [$PROFILE] is running. PID is [$pid]."
else
echo "[$APP_NAME] - [$PROFILE] is not running."
fi
}
# 重启应用
restart() {
stop
start
}
# 检查参数
if [ -z "$APP_NAME" ]; then
echo "Missing project name!"
usage
fi
if [ -z "$PROFILE" ]; then
echo "Missing profile!"
usage
fi
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
# 如果在Windows下编辑并复制到Linux,需要转换文件格式
# 使用 sed -i 's/\r$//' script.sh 来转换脚本文件格式
确保在Linux系统中将脚本文件保存成UNIX格式,并且赋予执行权限:chmod +x script.sh
然后,您可以通过以下命令执行脚本进行应用的部署操作:
./script.sh start myapp.jar dev
./script.sh stop myapp.jar dev
./script.sh restart myapp.jar dev
./script.sh status myapp.jar dev
请将myapp.jar替换成您的实际应用名,dev替换为您需要部署的环境配置。