插件式框架技术可行性研究
前沿
纯粹属于突发奇想,落地可能比这情况复杂多,这里暂只提供可行性研究,后续如果有时间可能会提供出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。(仅支持首次启动初始化的插件)