Solon的E-Spi与H-Spi机制:解决fatjar部署难题,该选哪个?
【Java服务部署难题与Solon机制】将一个Java服务打成单个fatjar发布出去后运维想更改数据源指向业务团队想在不重启进程的情况下下线模块若只能选择“重新打包、整包重发”会产生诸多不便。而Solon为解决这些问题准备了两套机制E-Spi体外扩展和H-Spi热插拔。不过选错机制代价要么是灵活性要么是稳定性。下面将详细介绍它们的使用方法和适用场景。【共同痛点fatjar密封难题】fatjar部署方便但修改困难配置文件和业务模块都被打包在其中。E-Spi和H-Spi都能解决这一问题但契约不同。E-Spi可将配置文件和插件jar放在fatjar外面启动时加载进同一运行时简单且无需额外依赖但变更需重启H-Spi为每个插件提供独立的ClassLoader可在服务持续运行时启停模块能力更强但责任也更大。【E-Spi配置与模块外置方案】E-Spi直接针对fatjar部署场景。指定一个扩展目录启动时Solon会扫描并加载其中内容包括.properties/.yml文件作为扩展配置.jar/.zip文件作为插件包。具体步骤如下第一步 ---- 声明扩展目录可通过配置solon.extend指定扩展目录若加上“!”前缀Solon会自动创建该目录。第二步 ---- 放置文件将相关文件放在jar旁边如demo.jar、demo_ext/_db.properties、demo_ext/demo_user.jar、demo_ext/demo_order.jar。这样数据源配置在jar外运维可直接修改配置文件无需触碰fatjar。第三步可选 ---- 代码加载若想在代码中加载额外内容内核提供了接口。底层是AppClassLoader.addJar(URL | File)体现了E-Spi的特点一切共享拆合随意更新需重启无额外依赖。同时插件jar打包有要求官方示例为“demo2002-external_ext”。【H-Spi隔离与热替换利器】H-Spi是更强大的工具可将业务模块开发成自包含的插件包服务运行时可实时加载和卸载。与E-Spi的本质区别是隔离每个插件有自己的ClassLoader、AppContext和配置更新插件无需重启主服务但主应用需引入solon-hotplug依赖。ClassLoader契约隔离是关键类的可见性规则重要。父ClassLoader的类和资源子级可见但子级注册的东西需在父级stop事件中注销兄弟ClassLoader之间无法使用彼此的类和资源需通过事件总线沟通。start与stop方法可热插拔的插件实现Plugin接口start方法注册模块所需资源stop方法必须移除注册过的所有资源否则会泄漏。模板渲染在ClassLoader上有坑渲染器需钉在正确的ClassLoader上。跨模块通讯靠事件总线配弱类型载荷官方示例包为“demo1011”插件管理可借助solon-hotplug进一步优化。【E-Spi与H-Spi对比】从ClassLoader、AppContext、配置共享情况更新后是否需重启额外依赖侧重点资源移除方式跨模块通讯方式底层机制等维度对比E-Spi和H-Spi各有特点。维度E-SpiH-SpiClassLoader / AppContext / 配置共享隔离完全更新后是否需重启是否热更新额外依赖无内核内置solon-hotplug侧重点简单体外扩展 / 改配置隔离 热插拔 管理资源移除无需特殊处理必须在“stop”里手动移除所有注册的资源跨模块通讯直接共享事件总线 / 弱类型数据底层机制AppClassLoader.addJar隔离ClassLoader “Plugin.start/stop”【如何选择E-Spi与H-Spi】选择时可思考“这东西必须在不重启的情况下变更吗”若不需要有重启窗口即可可选择E-Spi它能满足多数“不想重打fatjar”的场景无额外依赖和生命周期记账负担若需要模块变更时服务一直在线则选择H-Spi可获得真正的隔离和实时替换但需遵守stop清理纪律和跨模块契约。不少团队会同时使用两者E-Spi管外置配置H-Spi管需热替换的模块。对于长期演进的Solon服务结构设计建议仔细阅读官方文档。那么你的fatjar最需要先甩掉的是配置还是整个模块

相关新闻

5分钟快速上手:RVC语音转换终极指南与实战技巧

5分钟快速上手:RVC语音转换终极指南与实战技巧

5分钟快速上手&#xff1a;RVC语音转换终极指南与实战技巧 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversion-Web…

2026/10/7 16:20:50 阅读更多 →
公证和海牙认证有什么区别?所需材料、周期攻略快收藏

公证和海牙认证有什么区别?所需材料、周期攻略快收藏

准备出国留学、跨国结婚或是企业出海&#xff0c;你是不是也被各种“认证”搞得头大&#xff1f;明明手里已经有了公证书&#xff0c;为什么还要再跑一趟去办海牙认证&#xff1f;这两者到底是不是一回事&#xff1f;别急&#xff0c;今天这篇干货满满的文章&#xff0c;帮你把…

2026/10/2 4:42:17 阅读更多 →
ass服务器管理员手册:监控上传活动、设置速率限制与系统维护

ass服务器管理员手册:监控上传活动、设置速率限制与系统维护

ass服务器管理员手册&#xff1a;监控上传活动、设置速率限制与系统维护 【免费下载链接】ass The simple self-hosted ShareX server 项目地址: https://gitcode.com/gh_mirrors/as/ass ass&#xff08;GitHub 加速计划&#xff09;作为一款简单的自托管 ShareX 服务器…

2026/10/6 11:53:48 阅读更多 →

最新新闻

PySide2工具栏与状态栏实战:QToolBar和QStatusBar高效开发指南

PySide2工具栏与状态栏实战:QToolBar和QStatusBar高效开发指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 3:06:32 阅读更多 →
Hadoop+Spark+Python构建商品推荐系统:ALS实战与避坑指南

Hadoop+Spark+Python构建商品推荐系统:ALS实战与避坑指南

看到这个标题&#xff0c;我第一反应是&#xff1a;又一个把推荐系统和大数据技术绑在一起搞的项目。这类项目近几年在校招项目、公司内部数据组、甚至中小电商后台都特别常见&#xff0c;因为它刚好踩中了两个痛点——单机跑不动海量日志&#xff0c;纯规则做不出个性化。Hado…

2026/10/14 3:06:32 阅读更多 →
护眼之星4.2便携版完整指南:安装、配置与自动化护眼调参

护眼之星4.2便携版完整指南:安装、配置与自动化护眼调参

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 3:06:32 阅读更多 →
AI生成图如何只换光不改构图?Relight Studio重光照实测与工作流指南

AI生成图如何只换光不改构图?Relight Studio重光照实测与工作流指南

以前&#xff0c;一张生成图如果光不好&#xff0c;想改光基本等于全盘重来。客户说“能不能把黄昏改成正午”&#xff0c;你跟设计师大眼瞪小眼——重跑一次扩散模型&#xff0c;表情变了、构图偏了、商品上的LOGO糊了&#xff0c;能幸存下来的概率不高。Luma最近推出的Religh…

2026/10/14 3:06:32 阅读更多 →
C++对象存储SDK集成实战:从编译到分片上传的避坑指南

C++对象存储SDK集成实战:从编译到分片上传的避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 3:06:32 阅读更多 →
问题:ubuntu与linux开发板互ping

问题:ubuntu与linux开发板互ping

一、问题原理要解决ubuntu与开发板互ping的问题&#xff0c;就是要使ubuntu和开发板在同一个网段上面。本次问题解决环境&#xff1a;开发板 和 windows 均通过wifi的方式连接网络。二、解决方法1、首先将ubuntu设置成桥接模式状态栏上方点击 虚拟机&#xff0c;点击 设置&…

2026/10/14 3:05:32 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起&#xff1a;它到底想解决什么问题第一次看到"AnyPS5"这个标题&#xff0c;我脑子里冒出来的第一个念头是&#xff1a;这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述&#xff1a;Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师&#xff0c;我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性&#xff0c;实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景&#xff0c;也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间&#xff0c;确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中&#xff0c;这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →