前言
在springboot开发时,在项目开发完成后,打包发布是必不可少的过程(jar,原生执行文件,dockerfile等),但打包也是有一些技巧存在的,面对纷繁复杂的部署环境,我们不能只会打一个jar包,更要懂得在如何部署时更方便运行和修改。
环境准备
版本
| 名称 | 版本 |
|---|---|
| jdk | 21 |
| springboot | 3.5.6 |
注:这里也可以是其它版本,不强制要求。
方法
复制配置(安装等)文件
有人可能会说了,复制文件,这有什么技巧,我直接复制不就行了(有手就行)。如果是这样,你可能有些out了,既然是用maven命令打包jar包当然是希望在打包的过程中复制文件到目标目录了。
首先需要在pom中添加maven-resources-plugin依赖,内容如下:
<plugin>
<groupid>org.apache.maven.plugins</groupid>
<artifactid>maven-resources-plugin</artifactid>
<version>3.3.1</version>
<executions>
<execution> <!-- 复制配置文件 -->
<id>copy-resources</id>
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>application.yml</include>
<include>application-*.yml</include>
<include>install.sh</include>
</includes>
</resource>
</resources>
<outputdirectory>${project.build.directory}</outputdirectory>
</configuration>
</execution>
</executions>
</plugin>在上述pom文件中实现的功能是:
当运行mvn pakage命令时,将src/main/resources 目录下的
- application.yml
- application-*.yml
- install.sh
文件复制到目标${project.build.directory}(target)目录下。
这样再有一些其它文件需要跟随打包的jar包一起复制时,只需要修改pom文件即可。
安装服务
这里有个install.sh文件也一起复制过去的作用是:
可以快速的安装当前jar包为服务,毕竟谁也不想每次都使用java命令启动程序,这很不方便。
脚本内容如下:
#! /bin/sh
word_dir=$(cd $(dirname $0); pwd)
service_name="cat-service"
# 检查是否为 root 用户
if [ "$(id -u)" -ne 0 ]; then
echo "提示: 建议使用 root 用户执行此脚本,否则可能权限不足!"
read -p "继续?(y/n) " -n 1 -r
if [[ ! $reply =~ ^[yy]$ ]]; then
exit 1
fi
echo
fi
# 当前目录直接搜索(不含子目录)
jar_files=(*.jar)
if [ ${#jar_files[@]} -eq 0 ]; then
echo "当前目录无 jar 文件!"
exit 1
fi
# 遍历结果
for jar in "${jar_files[@]}"; do
echo "找到 jar 文件: $jar"
done
# 写文件
# 生成 systemd 服务文件内容
service_file="/etc/systemd/system/${service_name}.service"
cat << eof | sudo tee "$service_file" > /dev/null
[unit]
description=${service_name}
after=syslog.target
[service]
user=$user
workingdirectory=${word_dir}
execstart=java -jar ${jar_files}
successexitstatus=143
restart=on-failure
restartsec=10s
environment=spring_profiles_active=prod
[install]
wantedby=multi-user.target
eof
# 重载 systemd 并启动服务
sudo systemctl daemon-reload
sudo systemctl enable "$service_name"
sudo systemctl start "$service_name"
# 验证服务状态
echo "服务已安装!执行以下命令查看状态:"
echo "sudo systemctl status $service_name"
脚本里只需要修改下服务的名称即可使用,拿来就用。
总结
这里只是举了一个简单的例子,通过使用maven-resources-plugin依赖去复制配置文件和相关自定义的快速安装程序,即可完成jar包的外部配置和快速启动。
当然,这不是规定,你也可以自己去创建一些其它快速部署的脚本进行项目的快速部署和启动。
以上就是springboot打包为外部配置包的技巧分享的详细内容,更多关于springboot外部配置打包的资料请关注代码网其它相关文章!
发表评论