springboot项目部署脚本
Springboot部署脚本
该脚本可用于jenkins自动执行,具有以下功能
- 适配所有以内嵌tomcat容器springboot项目jar包
- 可根据参数选择环境,基于profiles
- 可自动识别并关闭已存在进程
- 第一个参数是指定jar包所在绝对路径(该路径下必须有且仅有一个.jar文件) 第二个参数是spring.profiles标识
用法 sh deploy.sh /app/yourdir/ dev
#!/bin/bash# 部署Spring Boot应用的Shell脚本# 检查参数是否正确
if [ $# -lt 1 ] || [ $# -gt 2 ]; thenecho "用法: $0 <应用目录> [环境名称]"exit 1
fiAPP_DIR=$1# 检查应用目录是否存在
if [ ! -d "$APP_DIR" ]; thenecho "错误:应用目录不存在:$APP_DIR"exit 1
fi
# 查找目录中的JAR文件
JAR_FILES=("$APP_DIR"/*.jar)
JAR_COUNT=${#JAR_FILES[@]}
echo "找到Jar包 $JAR_FILES"# 验证JAR文件数量
if [ $JAR_COUNT -eq 0 ]; thenecho "错误:在目录 $APP_DIR 中未找到任何JAR文件。"exit 1
elif [ $JAR_COUNT -gt 1 ]; thenecho "错误:在目录 $APP_DIR 中找到多个JAR文件,请确保只有一个。"echo "找到的JAR文件:"printf '%s\n' "${JAR_FILES[@]}"exit 1
fiAPP_JAR=${JAR_FILES[0]}
APP_NAME=$(basename $APP_JAR)
echo "准备执行jar包 $APP_NAME "
PROFILE=${2:-""}
# 函数:停止正在运行的应用
stop_application() {echo "正在检查应用是否正在运行..."# 使用jps查找包含指定jar包名称的Java进程jps -l | grep "$APP_NAME" | while read pid appdoecho "正在停止应用 [PID: $pid, APP: $app]"kill $pid# 等待最多5秒直到进程终止for i in {1..5}; doif ps -p $pid > /dev/null; thensleep 1elsebreakfidone# 如果仍然存在则强制终止if ps -p $pid > /dev/null; thenecho "强制终止应用 [PID: $pid]"kill -9 $pidfidone
}# 函数:启动应用
start_application() {if [ -n "$PROFILE" ]; thenJAVA_OPTS="--spring.profiles.active=$PROFILE"elseJAVA_OPTS=""fiecho "准备执行jar包 $APP_JAR"echo "正在启动应用,当前运行环境为 [$PROFILE]"nohup java -jar $APP_JAR $JAVA_OPTS > /dev/null 2>&1 &echo "应用已启动,输出重定向到nohup.out"
}# 主执行流程
stop_application
# 等待2秒确保进程完全停止
sleep 2
start_application# 验证启动结果
sleep 10
echo "启动验证:"
jps -l | grep "$APP_NAME" | while read npid napp
doecho "应用启动成功 [PID: $npid,APP: $napp]"
done
相关文章:
springboot项目部署脚本
Springboot部署脚本 该脚本可用于jenkins自动执行,具有以下功能 适配所有以内嵌tomcat容器springboot项目jar包可根据参数选择环境,基于profiles可自动识别并关闭已存在进程第一个参数是指定jar包所在绝对路径(该路径下必须有且仅有一个.jar文件) 第二…...
黑马Java面试教程_P5_微服务
系列博客目录 文章目录 系列博客目录1.引言2.Spring Cloud2.1 Spring Cloud 5大组件有哪些?面试文稿 2.2 服务注册和发现是什么意思?Spring Cloud 如何实现服务注册发现?面试文稿 2.3 我看你之前也用过nacos、你能说下nacos与eureka的区别?面试文稿 2.4 你们项目负载均衡如…...
使用Fuse-DFS挂载文件存储 HDFS-后端存储ceph
1. 编译环境准备 yum install cmake3 ln -s /usr/bin/cmake3 /usr/bin/cmake yum install gcc-c安装挂载依赖 yum -y install fuse fuse-devel fuse-libs执行以下命令,载入FUSE模块 modprobe fuse2. 下载源码包 hadoop-3.3.4-src.tar.gz解压后执行以下命令 打开…...
生成式AI项目的生命周期
总结自视频(吴恩达大模型入门课):9_13_generative-ai-project-lifecycle_哔哩哔哩_bilibili 生成周期如下图,包含四部分:任务范围(Scope),选择大模型(Select)…...
SOC-ATF 安全启动BL1流程分析(1)
一、ATF 源码下载链接 1. ARM Trusted Firmware (ATF) 官方 GitHub 仓库 GitHub 地址: https://github.com/ARM-software/arm-trusted-firmware 这是 ATF 的官方源码仓库,包含最新的代码、文档和示例。 下载方式: 使用 Git 克隆仓库: git…...
游戏引擎学习第127天
仓库:https://gitee.com/mrxiao_com/2d_game_3 为本周设定阶段 我们目前的渲染器已经实现了令人惊讶的优化,经过过去两周的优化工作后,渲染器在1920x1080分辨率下稳定地运行在60帧每秒。这个结果是意料之外的,因为我们没有预计会达到这样的…...
Grafana使用日志7--开启Sigv4
背景 在Grafana中,有些data source是需要开启sigv4认证的,例如OpenSearch,这个配置项默认是关闭的,这里我们介绍一下怎么开启 步骤 传统方式 如果我们想在Grafana中开启sigv4认证,我们需要在grafana.ini中修改一个…...
UWB人员定位:精准、高效、安全的智能管理解决方案
在现代企业管理、工业生产、安全监测等领域,UWB(超宽带)人员定位系统正逐步成为高精度定位技术的首选。相较于传统的GPS、Wi-Fi、蓝牙等定位方式,UWB具备厘米级高精度、低延迟、高安全性、抗干扰强等突出优势,能够实现…...
二、QT和驱动模块实现智能家居----2、编译支持QT的系统
因为我们的Linux内核文件不支持QT系统(当然如果你的支持,完全跳过这篇文章),所以我们要从网上下载很多软件包,这里直接用百问网的软件包,非常方便。 一:Ubuntu 配置 1 设置交叉编译工具链 以…...
Windows上使用go-ios实现iOS17自动化
前言 在Windows上运行iOS的自动化,tidevice对于iOS17以上并不支持,原因是iOS 17 引入新通信协议 RemoteXPCQUIC,改变了 XCUITest 的启动方式。 一、go-ios的安装 1、安装命令:npm i go-ios 2、安装完成后输入命令which io…...
越南SD-WAN跨境组网专线助力制造业访问国内 OA、ERP系统难题
近年来,随着全球制造业格局的不断调整,越来越多的制造业企业选择将工厂建立在越南。越南凭借其相对低廉的劳动力成本、优惠的政策以及优越的地理位置,吸引了大量的外资制造业企业入驻。然而,这些在越南设厂的企业却面临着一个棘手…...
【广度优先搜索】图像渲染 岛屿数量
文章目录 733. 图像渲染解题思路:BFS200. 岛屿数量解题思路:广度优先遍历 733. 图像渲染 733. 图像渲染 有一幅以 m x n 的二维整数数组表示的图画 image ,其中 image[i][j] 表示该图画的像素值大小。 你也被给予三个整数 sr , sc 和…...
Rust学习总结之-枚举
枚举是一个很多语言都有的功能,不过不同语言中其功能各不相同但是要表达的意思是一致的,枚举就是对于一个事物可以穷举出所有可能得值。比如说人的性别就可以用枚举,男人和女人两种。下面我们来学习Rust中的枚举。 一:枚举定义 …...
Linux下用route命令修改默认网关,不用重启网络
在Linux系统中,可以使用route命令来修改默认网关,而不需要重启网络。 下面是使用route命令修改默认网关的步骤: 打开终端窗口,以root用户或拥有sudo权限的用户身份登录。 使用以下命令查看当前的路由表信息: route…...
Datawhale 数学建模导论二 笔记5 多模数据与智能模型
主要涉及到的知识点有: 数字图像处理与计算机视觉 计算语言学与自然语言处理 数字信号处理与智能感知 10.1 数字图像处理与计算机视觉 视觉信息是我们第一种非常规的数据模式,在Python当中可以使用opencv处理数字图像,并提取出视觉特征用…...
【练习】【贪心】力扣1005. K 次取反后最大化的数组和
题目 1005 K 次取反后最大化的数组和 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组: 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后,返回数组 可…...
python学习七
作用域: 在编程语言中定义变量的可见性和生命周期的规则集合。它决定了在程序中的哪些位置可以访问或引用某个变量 1.全局作用域: 全局作用域是指在整个程序中都可见的变量。在函数外 部定义的变量通常具有全局作用域,在任何地方都可以访问和…...
安全运营的“黄金4小时“:如何突破告警疲劳困局
在当今复杂多变的网络安全环境中,安全团队面临着前所未有的挑战。尤其是面对高级持续性威胁(APT)时,最初的“黄金4小时”成为决定成败的关键窗口。在这段时间内,快速而准确地响应可以极大地降低损失,然而&a…...
本地部署Embedding模型API服务的实战教程
大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法大赛评委,编写微软OpenAI考试认证指导手册。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。授权多项发明专利。对机器学…...
数据结构:二叉树的链式结构及相关算法详解
目录 一.链式结构的实现 1.二叉树结点基本结构,初始化与销毁: 二.链式结构二叉树的几种遍历算法 1.几种算法的简单区分: 2.前序遍历: 3.中序遍历: 4.后序遍历: 5.层序遍历(广度优先遍历B…...
不止是移动:用UE5.1蓝图优化你的MetaHuman性能(头发渲染、LOD设置避坑指南)
不止是移动:用UE5.1蓝图优化你的MetaHuman性能(头发渲染、LOD设置避坑指南)在虚幻引擎5.1中,MetaHuman已经成为了数字人创作的重要工具。然而,许多开发者在实现了基础移动控制后,往往会忽视对MetaHuman资产…...
Redis Bitmap的隐藏用法:从“优惠券防超领”到“大数据去重”的实战避坑指南
Redis Bitmap的隐藏用法:从“优惠券防超领”到“大数据去重”的实战避坑指南 在数据密集型的现代应用中,如何高效处理海量数据的唯一性校验和状态标记,一直是开发者面临的挑战。Redis的Bitmap数据结构以其极低的内存消耗和O(1)时间复杂度的位…...
终极指南:如何用猫抓浏览器扩展构建高效的流媒体资源嗅探工作流
终极指南:如何用猫抓浏览器扩展构建高效的流媒体资源嗅探工作流 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓(cat-c…...
如何告别城通网盘龟速下载:三步获取高速直连的终极方案
如何告别城通网盘龟速下载:三步获取高速直连的终极方案 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 还在为城通网盘那令人抓狂的下载速度而苦恼吗?每次点击下载按钮后&#x…...
别再硬啃C++了!用这个UE插件,5分钟让Web页面跑在虚幻引擎里
零代码整合Web与虚幻引擎:用WebUI插件打造数字孪生控制面板当Three.js的数据可视化大屏需要与UE5的工业场景联动,或是Vue构建的管理后台要嵌入数字孪生项目时,传统方案往往要求开发者同时精通前端框架和虚幻引擎蓝图系统。现在,通…...
《道德经》第二十章
本章以绝学无忧我独昏昏为核心,专讲体道者超越世俗价值、回归生命本源的精神境界,是老子自我写照式的抒情篇章。以“唯阿善恶相去几何”的追问破题,以“众人熙熙”与“我独泊兮”的强烈对比展开,最终以“贵食母”点明与道合一的生…...
在Ubuntu 22.04上,用AutoDockTools给蛋白-小分子做对接,保姆级避坑指南
在Ubuntu 22.04上,用AutoDockTools给蛋白-小分子做对接,保姆级避坑指南1. 环境准备与依赖安装Ubuntu 22.04 LTS作为长期支持版本,其稳定性非常适合科研计算。但首次使用时,需要确保系统环境完整。打开终端(CtrlAltT&am…...
双线性系统与RNN架构演进:从理论到实践
1. 双线性系统基础与RNN架构演进 双线性系统作为控制理论中的重要模型类别,其数学本质是状态变量与控制输入的乘积项构成的动态系统。这类系统在形式上可以表示为: dx/dt Ax Bu Nxu y Cx Du其中Nxu项就是典型的双线性耦合项。这种结构在保持线性系…...
Godot 4.2 2D游戏开发:用TileMap图层一键搞定游戏地图的可行走区域
Godot 4.2 2D游戏开发:用TileMap图层一键搞定游戏地图的可行走区域在2D游戏开发中,地图设计往往是最耗时的环节之一。传统方法需要开发者手动绘制碰撞体或编写复杂的导航逻辑,而Godot 4.2的TileMap导航层功能彻底改变了这一局面。想象一下&am…...
全球首个通用智能人“通通“走向现实——具身智能落地的工程师视角
全球首个通用智能人"通通"走向现实——具身智能落地的工程师视角 工程师视角深度剖析 | 2026年5月24日 一、什么是"通通"?——先把这个概念说清楚 2026年初,北京通用人工智能研究院(简称"通研院")…...
