【借助pf4j实现基于spring-boot的插件化开发

文章介绍了如何利用PF4J库实现基于Spring-Boot的插件化开发,通过自定义ClassLoader动态加载和卸载插件。项目包含一个示例应用,展示了插件的管理、加载、启用、禁用等功能,并提供了SDK供用户进行功能扩展。用户可以基于SDK开发插件,然后在业务功能扩展点动态加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

借助pf4j实现基于spring-boot的插件化开发

背景

JenkinsSonarQube等Java实现的Web应用都有插件体系,一般来说都是先从插件市场下载一个插件,然后系统要求重启(某些功能可以不用重启),插件功能就能在页面上出现,并且还能实时禁用、启用、删除插件。

在某些工具型Web应用中,也需要类似的插件扩展和管理功能,OSGI定义了一套Java应用模块化的规范,Apache和Eclipse都有相应的实现,但是都太重了,PF4J是一个非常好的工具,不管是集成还是功能都有较好的表现,核心原理是通过自定义ClassLoader动态加载和卸载插件,并且提供了插件管理工具。

场景

有一个spring-boot实现的web应用,在某一个业务功能上提供扩展点,用户可以基于SDK实现功能扩展,要求可以管理插件,并且能够在业务功能扩展点处动态加载功能。

项目地址&结构

项目地址:clyoudu/pf4j-spring

pf4j-spring
├── demo
│   ├── manager
│   ├── plugins
│   │   ├── greeting-button-plugin
│   │   ├── system-button-plugin
│   │   └── whether-button-plugin
│   └── sdk
├── pf4j-manager-spring-boot-starter
└── pf4j-spring-core
  1. pf4j-spring-core:PF4J有spring版本pf4j-spring,但是没有和spring-boot集成,并且部分实现想要修改,因此新建了pf4j-spring-core模块,和pf4j-spring几乎一致,修改了部分实现;
  2. pf4j-manager-spring-boot-starter:提供了spring-boot配置类和配置项
  3. demo:一个使用pf4j-manager-spring-boot-starter的完整例子
    • manager:主应用,spring boot web
    • sdk:插件扩展点定义
    • plugins:3个插件4个扩展功能

Demo运行

git clone https://github.com/clyoudu/pf4j-spring.git

编辑pf4j-spring/demo/manager/src/main/resources/application.yml, 重新指定spring.pf4j.path,该路径为插件保存位置

cd pf4j-spring
mvn clean package
cd demo/manager/target
java -jar manager-1.0.0-SNAPSHOT.jar

浏览器访问http://localhost:8080
在这里插入图片描述
Plugin Management:

  1. 上传插件,插件位置:demo/plugins/*/target/*.jar
  2. 点击’Reload’按钮, 插件列表会自动刷新
  3. Load/Unload/Start/Stop/Enable/Disable/Delete等操作会根据不同的插件状态变化

Business Feature:

  1. 插件状态变化,扩展功能列表也会变化
  2. 点击插件按钮,弹出的消息和插件实现预期一致
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值