SpringBoot打包为外部配置包的技巧分享

 更新时间:2025年10月18日 16:45:07   作者:盹猫  
在SpringBoot开发时,在项目开发完成后,打包发布是必不可少的过程(jar,原生执行文件,dockerfile等),但打包也是有一些技巧存在的,本篇文章就是记录打包为外部配置包的技巧,需要的朋友可以参考下

前言

在SpringBoot开发时,在项目开发完成后,打包发布是必不可少的过程(jar,原生执行文件,dockerfile等),但打包也是有一些技巧存在的,面对纷繁复杂的部署环境,我们不能只会打一个jar包,更要懂得在如何部署时更方便运行和修改。

环境准备

版本

名称版本
JDK21
SpringBoot3.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外部配置打包的资料请关注脚本之家其它相关文章!

相关文章

  • 基于Java生成图片验证码的方法解析

    基于Java生成图片验证码的方法解析

    这篇文章主要来为大家详细介绍一下基于Java生成图片验证码的具体方法,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
    2023-02-02
  • 输出java进程的jstack信息示例分享 通过线程堆栈信息分析java线程

    输出java进程的jstack信息示例分享 通过线程堆栈信息分析java线程

    通过ps到java进程号将进程的jstack信息输出。jstack信息是java进程的线程堆栈信息,通过该信息可以分析java的线程阻塞等问题。
    2014-01-01
  • hadoop序列化实现案例代码

    hadoop序列化实现案例代码

    序列化想必大家都很熟悉了,对象在进行网络传输过程中,需要序列化之后才能传输到客户端,或者客户端的数据序列化之后送达到服务端,本文将为大家介绍Hadoop如何实现序列化,需要的可以参考一下
    2022-01-01
  • java后台实现支付宝支付接口和支付宝订单查询接口(前端为APP)

    java后台实现支付宝支付接口和支付宝订单查询接口(前端为APP)

    这篇文章主要介绍了java后台实现支付宝支付接口和支付宝订单查询接口(前端为APP),非常具有实用价值,需要的朋友可以参考下
    2018-08-08
  • Java实现猜数程序

    Java实现猜数程序

    这篇文章主要为大家详细介绍了Java实现猜数程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • Java轻松掌握面向对象的三大特性封装与继承和多态

    Java轻松掌握面向对象的三大特性封装与继承和多态

    本文主要讲述的是面向对象的三大特性:封装,继承,多态,内容含括从封装到继承再到多态的所有重点内容以及使用细节和注意事项,内容有点长,请大家耐心看完
    2022-05-05
  • 基于令牌桶的限流器注解的简单实现详解

    基于令牌桶的限流器注解的简单实现详解

    令牌桶算法是一种常用的流量控制算法,用于限制请求或事件的发生速率,这篇文章主要介绍了如何基于令牌桶实现限流器注解,需要的可以参考一下
    2023-08-08
  • 树,二叉树(完全二叉树,满二叉树)概念图解

    树,二叉树(完全二叉树,满二叉树)概念图解

    今天小编就为大家分享一篇关于二叉树的图文详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧,希望能对你有所帮助
    2021-07-07
  • 深入解析Spring中的@Bean注解

    深入解析Spring中的@Bean注解

    这篇文章主要介绍了深入解析Spring中的@Bean注解,Spring的@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理,产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中,需要的朋友可以参考下
    2023-07-07
  • 什么是Base64以及在Java中如何使用Base64编码

    什么是Base64以及在Java中如何使用Base64编码

    这篇文章主要介绍了什么是Base64以及在Java中如何使用Base64编码的相关资料,文中包括Base64编码的基本原理、应用、Java实现、URL安全编码以及在JavaScript中的使用方法,需要的朋友可以参考下
    2024-12-12

最新评论