开发者

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

目录
  • 前言
  • 环境准备
    • 版本
  • 方法
    • 复制配置(安装等)文件
    • 安装服务
  • 总结

    前言

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

    环境准备

    版本

    名称版本
    JDK21
    SpringBoot3.5.6

    注:这里也可以是其它版本,不强制要求。

    方法

    复制配置(安装等)文件

    有人可能会说了,复制文件,这有什么技巧,我直接复制不就行了(有手就行)。如果是这样,你可能有些out了,既然是用Maven命令打包jar包当然是希望在打包的过程中复制文件到目标目录了。

    首先需要在pom中添加maven-resources-plugin依赖,内容如下:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugpythonin</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"
    

    脚本里只需要修改下服务的名称即可使用,拿来就用。

    总结

    这里只是举了一个简单的例子,通过使用ma编程ven-res编程客栈ources-plugin依赖去复制配置文件和相关自定义的快速安装程序,即可完成JAR包的外部配置和快速启动。

    当然,这不是规定,你也可编程客栈以自己去创建一些其它快速部署的脚本进行项目的快速部署和启动。

    以上就是SpringBoot打包为外部配置包的技巧分享的详细内容,更多关于SpringBoot外部配置打包的资料请关注编程客栈(www.devze.com)其它相关文章!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜