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

借助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. 点击插件按钮,弹出的消息和插件实现预期一致
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
springboot集成pf4j是一种实现插件开发的方式。在这种集成中,使用了pf4j-spring框架和自定义的pf4j-spring-core模块来扩展pf4j的功能,并提供了pf4j-manager-spring-boot-starter作为spring-boot的配置类和配置项。这样可以在spring-boot应用中轻松地管理和加载插件。 具体来说,项目中的pf4j-spring模块是PF4Jspring版本,但没有与spring-boot集成。为了满足需求,新建了pf4j-spring-core模块,与pf4j-spring几乎一致,但修改了部分实现。而pf4j-manager-spring-boot-starter提供了spring-boot的配置类和配置项。 在项目的结构中,主应用是manager模块,它是一个spring-boot web应用。sdk模块定义了插件的扩展点。而plugins目录下有三个插件和四个扩展功能。 要运行Demo,可以使用命令"git clone https://github.com/clyoudu/pf4j-spring.git"克隆项目。 综上所述,springboot集成pf4j是一种在spring-boot应用中实现插件开发的方法,通过使用pf4j-spring框架和自定义的pf4j-spring-core模块来扩展pf4j的功能,并提供了pf4j-manager-spring-boot-starter作为spring-boot的配置类和配置项。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [【借助pf4j实现基于spring-boot插件开发](https://blog.csdn.net/CL_YD/article/details/128836481)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [JAVA单例模式源码-pf4j-spring:Spring插件框架(PF4J-Spring框架集成)](https://download.csdn.net/download/weixin_38499336/19398119)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值