Spring Boot应用多环境打包与Shell自动化部署实践
一、多环境配置管理(Profile方案)
推荐方案:通过Maven Profiles实现环境隔离
在pom.xml
中定义不同环境配置,避免硬编码在application.yml
中:
<profiles><!-- 默认环境 --><profile><id>node</id><properties><activeProfile>node</activeProfile> <!-- 环境标识 --><package-name>${project.artifactId}</package-name><boot-main>com.example.Application</boot-main></properties><activation><activeByDefault>true</activeByDefault></activation></profile><!-- 其他环境 --><profile><id>node1</id><properties><activeProfile>node1</activeProfile><!-- 其他参数同上 --></properties></profile>
</profiles>
目录结构:
src/main/
└── profiles/├── node/ # 默认环境配置├── node1/ # 环境1配置└── node2/ # 环境2配置
二、使用assembly-plugin打包发布
目标:生成包含启动脚本、配置文件和依赖的ZIP包
1. Maven插件配置
<build><plugins><!-- 排除配置文件,由assembly单独处理 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.2.0</version><configuration><excludes><exclude>**/*.yml</exclude><exclude>**/*.properties</exclude></excludes></configuration></plugin><!-- 核心打包插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>3.3.0</version><configuration><descriptors><descriptor>src/assembly/assembly.xml</descriptor></descriptors></configuration><executions><execution><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins>
</build>
2. Assembly描述文件 (assembly.xml
)
<assembly><id>${activeProfile}</id><formats><format>zip</format></formats><includeBaseDirectory>false</includeBaseDirectory><!-- 依赖库 --><dependencySets><dependencySet><outputDirectory>${package-name}-${activeProfile}/lib</outputDirectory><useProjectArtifact>false</useProjectArtifact></dependencySet></dependencySets><!-- 配置文件 --><fileSets><fileSet><directory>src/main/profiles/${activeProfile}</directory><outputDirectory>${package-name}-${activeProfile}/conf</outputDirectory></fileSet><!-- 启动脚本 --><fileSet><directory>src/main/scripts</directory><fileMode>0755</fileMode><filtered>true</filtered> <!-- 启用变量替换 --></fileSet><!-- 应用JAR --><fileSet><directory>target</directory><includes><include>*.jar</include></includes><outputDirectory>${package-name}-${activeProfile}</outputDirectory></fileSet></fileSets>
</assembly>
打包命令:
mvn clean package -P node1 # 指定node1环境
三、Shell启动工具详解 (shenniu_publish.sh
)
功能:解压、启动、停止、重启应用
核心代码片段:
#!/usr/bin/env bash
# 从Maven接收的参数
baseZipName="${package-name}-${activeProfile}"
packageName="${package-name}"
mainClass="${boot-main}"# 解压部署包
function unzip_pkg() {if [ -f "${baseZipPath}" ]; thenunzip -o -d ${deployDir} ${baseZipPath}chmod +x ${deployDir}/*.shelseecho "错误:部署包不存在 ${baseZipPath}"exit 1fi
}# 启动应用(支持Java/NetCore)
function start_app() {# 停止已有进程stop_appcd ${deployDir}case "${languageType}" in"javac")nohup java -cp conf:lib/*:${packageName}.jar ${mainClass} >nohup.out 2>&1 &;;"java")nohup java -jar ${packageName}.jar >nohup.out 2>&1 &;;"netcore")nohup ./${packageName} >nohup.out 2>&1 &;;esac# 检查进程并跟踪日志check_pid && tail -f nohup.out
}# 停止应用
function stop_app() {pid=$(pgrep -f "${packageName}")[ -n "$pid" ] && kill -9 $pid
}# 主逻辑
case "$1" in"start") start_app ;;"stop") stop_app ;;"restart") stop_app && start_app ;;"deploy") unzip_pkg && start_app ;;*) echo "用法: $0 {start|stop|restart|deploy}" ;;
esac
四、Linux部署操作流程
-
上传ZIP包至服务器
-
执行部署命令:
# 1. 解决Windows格式问题 vim shenniu_publish.sh :set ff=unix # 转换行尾符 :wq# 2. 赋予执行权限 chmod +x shenniu_publish.sh# 3. 执行一键部署 ./shenniu_publish.sh deploy
-
管理应用状态:
./shenniu_publish.sh stop # 停止 ./shenniu_publish.sh restart # 重启
五、关键要点总结
- 环境隔离:通过Maven Profiles实现配置与代码分离
- 打包策略:
- 配置文件独立到
/conf
目录 - 启动脚本自动赋权(
fileMode>755
) - 动态替换脚本中的Maven变量(
<filtered>true</filtered>
)
- 配置文件独立到
- Shell工具优势:
- 统一管理应用生命周期
- 支持Java/NetCore多语言
- 日志自动重定向(
nohup.out
)
- 避坑指南:
- Windows编辑的Shell脚本需转换Unix行尾符(
:set ff=unix
) - 确保Linux环境有JRE/JDK运行时
- Windows编辑的Shell脚本需转换Unix行尾符(
相关文章:
Spring Boot应用多环境打包与Shell自动化部署实践
一、多环境配置管理(Profile方案) 推荐方案:通过Maven Profiles实现环境隔离 在pom.xml中定义不同环境配置,避免硬编码在application.yml中: <profiles><!-- 默认环境 --><profile><id>node…...

【深度学习】14. DL在CV中的应用章:目标检测: R-CNN, Fast R-CNN, Faster R-CNN, MASK R-CNN
深度学习在计算机视觉中的应用介绍 深度卷积神经网络(Deep convolutional neural network, DCNN)是将深度学习引入计算机视觉发展的关键概念。通过模仿生物神经系统,深度神经网络可以提供前所未有的能力来解释复杂的数据模式&…...
grpc的二进制序列化与http的文本协议对比
grpc的二进制序列化与http的文本协议对比 1. 二进制格式 vs 文本格式2. 编码机制:Varint 与固定长度3. 没有字段名与标点4. 较少的元信息开销4.1 HTTP/1.1 请求的元信息组成与开销4.1.1 各部分字节数示例 4.2 HTTP/2 帧结构与 HPACK 头部压缩4.2.1 HEADERS 开销对比…...
Linux 环境下 PPP 拨号的嵌入式开发实现
一、PPP 协议基础与嵌入式应用场景 PPP (Point-to-Point Protocol) 是一种在串行线路上传输多协议数据包的通信协议,广泛应用于拨号上网、VPN 和嵌入式系统的远程通信场景。在嵌入式开发中,PPP 常用于 GPRS/3G/4G 模块、工业路由器和物联网设备的网络连接…...

UE 材质基础第三天
飘动的旗帜 错乱的贴图排序,创建一个材质函数 可以用在地面材质 体积云材质制作 通过网盘分享的文件:虚幻引擎材质宝典.rar 链接: https://pan.baidu.com/s/1AYRz2V5zQFaitNPA5_JbJw 提取码: cz1q --来自百度网盘超级会员v6的分享...

【Github/Gitee Webhook触发自动部署-Jenkins】
Github/Gitee Webhook触发自动部署-Jenkins #mermaid-svg-hRyAcESlyk5R2rDn {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-hRyAcESlyk5R2rDn .error-icon{fill:#552222;}#mermaid-svg-hRyAcESlyk5R2rDn .error-tex…...
软件工程专业本科毕业论文模板
以下是软件工程专业本科毕业论文的通用模板框架,结合学术规范与工程实践要求,涵盖从需求分析到测试验证的全流程结构,并附格式说明与写作建议: 一、前置部分 1. 封面 - 包含论文标题(简明反映研究核心,如“…...

新松机械臂 2001端口服务的客户端例程
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...

电脑网络重置,找不到原先自家的WIFI,手机还能正常连接并上网
问题排查:1、电脑感觉网络太慢,因此打算点击了网络重置 2、点击提示会删除网络,在五分钟后关机重启 3、从设备管理器设备的无线wifi属性-事件中发现删除记录 4、选择更新驱动程序 5、从列表中选取 6、更改回老驱动版本 备选方案&#…...

期末复习(学习)之机器学习入门基础
上课没听过报道。欢迎补充交流! 前言:老师画的重点其实可以完全不用看,我这里只是看了一眼书顺着书本敲一遍。 比较干货的部分,直接看学习通的内容就好。最重要的是把学习通的内容记好。 目录 老师划的重点:P50 结构…...

网络各类型(BMA,NBMA,P2P)
网络类型—基于二层(数据链路层)使用的协议不同从而导致数据包封装方式不同,工作方式也有所区别,从而对网络本身进行分类 一、网络类型分类 2. 关键差异对比 1. HDLC(高级数据链路控制协议) 协议特点&…...
Linux 库文件的查看和管理
Linux 库文件说明1、库文件的类型2、库文件存储路径3、库文件查找顺序 Linux 库文件管理1、查看动态库相关信息2、添加动态库查找路径 Linux 库文件说明 1、库文件的类型 Linux 中的库文件本质上就是封装好的功能模块,某个应用程序如果要实现某个功能,…...
Java设计模式深度解析:策略模式的核心原理与实战应用
目录 策略模式基础解析策略模式实现指南策略模式典型应用场景Java生态中的策略模式实践策略模式进阶技巧策略模式最佳实践总结与展望1. 策略模式基础解析 1.1 核心概念与定义 策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法族,将每个算法封装成独立…...

【计算机网络】第3章:传输层—概述、多路复用与解复用、UDP
目录 一、概述和传输层服务 二、多路复用与解复用 三、无连接传输:UDP 四、总结 (一)多路复用与解复用 (二)UDP 一、概述和传输层服务 二、多路复用与解复用 三、无连接传输:UDP 四、总结 (…...
6、在树莓派上安装 NTP(Network Time Protocol )服务的步骤
在树莓派上安装 NTP(Network Time Protocol )服务的步骤: 1. 安装 NTP 服务 打开树莓派终端,输入以下命令更新软件包列表: sudo apt-get update然后安装 NTP 服务: sudo apt-get install ntp2. 配置 NT…...

神经符号AI的企业应用:结合符号推理与深度学习的混合智能
💡 技术前沿: 神经符号AI代表了人工智能发展的新阶段,它将深度学习的模式识别能力与符号推理的逻辑分析能力有机结合,创造出更加智能、可解释且可靠的AI系统。这种混合智能技术正在重塑企业的智能化应用,从自动化决策到…...

VSCode 中 C/C++ 安装、配置、使用全攻略:小白入门指南
引言 本文为Windows系统下安装配置与使用VSCode编写C/C代码的完整攻略,示例机器为Windows11。 通过本文的指导,你可以成功在Windows 机器上上使用VSCode进行C/C开发。 在文章开始之前,你可以先阅读下面这段话,以便于对步骤有个大…...

重温经典算法——希尔排序
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 基本原理 希尔排序是插入排序的改进版,通过按增量分组并逐步缩小增量实现排序。时间复杂度取决于增量序列,平均约为 O(n log n) 到 O(n^(3/2))&…...

CortexON:开源的多代理AI系统无缝自动化和简化日常任务
简介 CortexON是一个开源的多代理AI系统,灵感来自Manus和OpenAI DeepResearch等高级代理平台。CortexON旨在无缝自动化和简化日常任务,擅长执行复杂的工作流程,包括全面的研究任务、技术操作和复杂的业务流程自动化。 技术架构 CortexON的技…...

海信IP810N-海思MV320芯片-安卓9-2+16G-免拆优盘卡刷固件包
海信IP810N-海思MV320芯片-安卓9-216G-免拆优盘卡刷固件包 线刷方法:(新手参考借鉴一下) 1.准备一个优盘,最佳是4G,卡刷强刷刷机,用一个usb2.0的8G以下U盘,fat32,2048块单分区格式化…...
【Golang】使用gin框架导出excel和csv文件
目录 1、背景2、go库【1】excel库下载【2】csv标准库 3、代码示例4、使用方法 1、背景 项目中可能会遇到导入导出一批数据的功能,对于批量大数据可能用表格的方式直观性更好,所以本篇文件来讲一下go中导出excel和csv文件的方式。 2、go库 【1】excel库…...
【unity游戏开发入门到精通——通用篇】AssetBundle(AB包)和AssetBundleBrowser的使用介绍
文章目录 前言1、什么是AssetBundle?2、AB包与Resources系统对比3、AB包核心价值一、AB包打包工具Asset Bundle Browser1、下载安装AssetBundles-Browser2、打开Asset Bundle Browser窗口3、如何让资源关联AB包二、AssetBundleBrowser参数相关1、Configure 配置页签2、Build 构…...

2025年6月4日收获
Authorization Authorization是一种通用的、标准化的权限控制和认证的通用框架,它能够使跨系统和跨域的身份验证和授权管理更容易,使不同应用程序之间能够更轻松地实现单点登录(SSO)、用户身份验证和授权控制等。 在前端使用 axi…...

leetcode hot100 链表(二)
书接上回: leetcode hot100 链表(一)-CSDN博客 8.删除链表的倒数第N个结点 class Solution { public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* currhead;int len0;while(curr){currcurr->next;len;}int poslen-n…...

6. MySQL基本查询
1. 表的增删改查 Create(创建), Retrieve(读取), Update(更新), Delete(删除) 2. Create & Insert 语法: insert [info] table_name () values () 2.1. 案例: 创建一个学生表 指定列单行插入, 如果values前省略, 则默认是全属性插入多行指定列插入, 中间分隔符为, 3. 插入替…...
JavaWeb简介
目录 1.1 JavaWeb 简介 1.2 JavaWeb 技术栈 1.3 JavaWeb 交互模式 1.4 JavaWeb 的 C/S 和 B/S 模式 C/S 模式 (Client-Server / 客户端-服务器模式) B/S 模式 (Browser-Server / 浏览器-服务器模式) 1.5 JavaWeb 实现前…...

CMS32M65xx/67xx系列CoreMark跑分测试
CMS32M65xx/67xx系列CoreMark跑分测试 1、参考资料准备 1.1、STM32官方跑分链接 1.2、官网链接 官方移植文档,如下所示,点击红框处-移植文档: A new whitepaper and video explain how to port CoreMark-Pro to bare-metal 1.3、测试软件git下载链接 …...

中国区域30m/15天植被覆盖度数据集(2010-2022)
时间分辨率:日空间分辨率;:10m - 100m共享方:式开放获取数据大小:2.98 TB数据时间范围:2010-01-01 — 2022-12-31元数据更新时间:2024-12-23 数据集摘要 高时空分辨率的植被覆盖度产品存在着广…...
LabVIEW准分子激光器智能控制系统
LabVIEW 开发准分子激光器智能控制系统,针对放电激励型准分子激光器强电磁干扰环境下的控制难题,采用 “PC 端 LabVIEW 人机交互 MCU 端实时控制 光纤隔离通信” 架构,实现激光能量闭环控制、腔体环境监测、气路自动管理等功能。硬件选用 N…...
微服务面试资料1
在当今快速发展的技术领域,微服务架构已经成为构建复杂系统的重要方式之一。本文将围绕微服务的核心概念、技术栈、分布式事务处理、微服务拆分与设计,以及敏捷开发实践等关键问题展开深入探讨,旨在为准备面试的 Java 开发者提供一份全面的复…...