放弃SpringBoot !用基于Solon的H-Spi构建一个插件化业务平台

为什么使用Solon H-Spi?

构建java工程(c/js/py…),一般会使用预制法,构建系统内各个小部件、小模块。使得在开发运维时,更快适应业务变化和市场变化。
场景:工程应用功能,又小、又散、又敏捷。
能力:运营开发方面,需要灵敏、需要自由组装。

那么Solon官方给的解析是:

插件热插拔管理机制(H-Spi)
插件热插拔管理机制,简称:H-Spi。是框架提供的生产时用的另一种高级扩展方案。相对E-Spi,H-Spi 更侧重隔离、热插热拔、及管理性。
应用时,是以一个业务模块为单位进行开发,且封装为一个独立插件包。
1、特点说明
所有插件包 “独享” ClassLoader、AppContext、配置;完全隔离
可通过 Solon.app(), Solon.cfg(), Solon.context() 等…手动获取主程序或全局的资源
模块可以打包成一个独立的插件包(放在体外加载),也可以与主程序一起打包。“分”或“合”也是自由
更新插件包,不需要重启主服务。热更新
开发时,所有资源完全独立自控。且必须完成资源移除的任务
模块之间的通讯,尽量交由事件总线(EventBus)处理。且尽量用弱类型的事件数据(如Map,或 JsonString)。建议结合 “DamiBus” 一起使用,它能帮助解耦
主程序需要引入 “solon-hotplug” 依赖,对业务插件包进行管理
2、关于 ClassLoader 隔离
在 ClassLoader 隔离下,开发业务是比较麻烦的。注意:
父级 ClassLoader (一般,公共资源放这里)
子级,可以获取并使用它的类或资源
如果有东西注册,在插件 stop 事件里要注销掉
同级 ClassLoader
同级,无法相互使用类或资源
不要有显示类的交互
一般通过事件总线进行交互
交互的数据一般用父级 ClassLoader 的实体类
或者用弱类型的数据,如 json(像使用远程接口那样对待)
尽量让插件之间,相互比较独立,不需要什么交互(或少量使用事件总线交互)。

用一张图说明,H-Spi为我们处理了什么:

image
上图,绿色部分,按需打包:

  1. 可以完全打包到主应用中
  2. 将主应用、文章插件、财务插件等等插件。全部各自独立打包
  3. 主应用,上传插件包,即可启动具体插件。

项目分享 (基于Solon的H-Spi构建的插件化业务平台)

基于Solon的H-Spi构建的插件化业务平台 https://gitee.com/uidoer/solon-manager

简介:

Solon-Manager 基于Solon的不分离系统。 引入h-spi插件管理,方便平台化管理你的功能插件(内置cms管理系统)。 插件开发方面,按开发指引,开发者自行开发插件。 上传后,在系统内,自行上传jar包,按需扩展、运行插件功能。 技术选型: solon / layui / mybatis-plus / redis

solon 插件平台化的操作方式:

solon插件化的操作方式

这样,我们就启动了一个外部的插件到应用中。这个过程是不需要重启主应用的。不需要停机进行安装或者更新。
接下来,可以访问该插件的入口: http:😕/localhost:8080/cms/
(注意:上方链接的 /cms/ 部分是这个插件的入口)
这个插件运行的效果是:
image

那么,效果是了解了。那么如何开发呢?

开发步骤

 git clone https://gitee.com/uidoer/solon-manager 
  1. 推荐使用idea + mysql .
  2. 导入./doc/mysql.sql 和 ./doc/cms/sql/jfinal_project_center.sql
  3. 启动solon-system(主应用)启动类是:vip.fuck.sm.SolonManagerApplication
  4. 打开主应用入口:http://localhost:8080/index/login 进行登录 ( admin / 123456 )
    简要提及:为了方便开发调试,我已经在主应用导入了 cms模块
        <dependency>
             <groupId>vip.fuck.sm.plugins.cms</groupId>
             <artifactId>cms</artifactId>
             <version>1.0</version>
             <scope>compile</scope>
         </dependency>
    
  5. maven package 打包一下 cms模块
  6. 将打包后的cms.jar包,上传到主应用进行启动
  7. 打开cms首页:http://localhost:8080/cms
  8. 打开cms后台:http://localhost:8080///cms//admin/login ( admin / 123456 )

这样,一把下来,就体验了H-SPI带来的构建体验、运行体验。

同样,如果感兴趣的同学,可以fork,进行二开。
文档教程:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值