插件式框架技术可行性研究
前沿
纯粹属于突发奇想,落地可能比这情况复杂多,这里暂只提供可行性研究,后续如果有时间可能会提供出demo,目前仅供参考,有兴趣的可以一起讨论。
需求背景
因为我主要从事与流程引擎相关的工作,最近突发奇想,因为不同的公司可能会有类似的流程。能不能将现有的 流程引擎应用,升级为流程引擎中心。通过引入插件开发者,增强系统的核心竞争力。类似与 jira 插件 或者 微信/支付宝 等小程序模式。
技术原理
通过类加载机制,加载远程或指定路径的bean,从而实现项目插件化的目的。
技术准备
- pf4j
PF4J 是一个 Java 的插件框架,为第三方提供应用扩展的渠道。使用 PF4J 你可以轻松将一个普通的 Java 应用转成一个模块化的应用。PF4J 本身非常轻量级,只有 50KB 左右,目前只依赖了 slf4j。Gitblit 项目使用的就是 PF4J 进行插件管理。
github链接: pf4j. - springboot-plugin-framework-parent
发现一个基于 pf4j 很好拓展的项目
介绍
该框架主要是集成于springboot项目,用于开发插件式应用的集成框架。
核心功能
插件配置式插拔于springboot项目。
在springboot上可以进行插件式开发, 扩展性极强, 可以针对不同项目开发不同插件, 进行不同插件jar包的部署。
可通过配置文件指定要启用或者禁用插件。
支持上传插件和插件配置文件到服务器, 并且无需重启主程序, 动态部署插件、更新插件。
支持查看插件运行状态, 查看插件安装位置。
无需重启主程序, 动态的安装插件、卸载插件、启用插件、停止插件、备份插件、删除插件。
在插件应用模块上可以使用Spring注解定义组件, 进行依赖注入。
支持在插件中开发Rest接口。
支持在插件中单独定义持久层访问等需求。
可以遵循主程序提供的插件接口开发任意扩展功能。
插件可以自定义配置文件。目前只支持yml文件。
支持自定义扩展开发接口, 使用者可以在预留接口上扩展额外功能。
支持插件之间的通信。
支持插件中使用事务注解。
支持Swagger。(仅支持首次启动初始化的插件)