功能介绍
介绍
该框架主要是集成于springboot项目,用于开发插件式应用的集成框架。
核心功能
- 插件配置式插拔于springboot项目。
- 在springboot上可以进行插件式开发, 扩展性极强, 可以针对不同项目开发不同插件, 进行不同插件jar包的部署。
- 可通过配置文件指定要启用或者禁用插件。
- 支持上传插件和插件配置文件到服务器, 并且无需重启主程序, 动态部署插件、更新插件。
- 支持查看插件运行状态, 查看插件安装位置。
- 无需重启主程序, 动态的安装插件、卸载插件、启用插件、停止插件、备份插件、删除插件。
- 在插件应用模块上可以使用Spring注解定义组件, 进行依赖注入。
- 支持在插件中开发Rest接口。
- 支持在插件中单独定义持久层访问等需求。
- 可以遵循主程序提供的插件接口开发任意扩展功能。
- 插件可以自定义配置文件。目前只支持yml文件。
- 支持自定义扩展开发接口, 使用者可以在预留接口上扩展额外功能。
- 利用扩展机制, 定制了SpringBoot-Mybatis扩展包。使用该扩展包, 使用者可以在插件中自定义Mapper接口、Mapper xml 以及对应的实体bean。
并且支持集成Mybatis-Plus。 - 支持插件之间的通信。
- 支持插件中使用事务注解。
- 支持Swagger。(仅支持首次启动初始化的插件)
运行环境 - jdk1.8+
- apache maven 3.6
maven 仓库地址
https://mvnrepository.com/artifact/com.gitee.starblues/springboot-plugin-framework
快速入门
新建项目。
Maven目录结构下所示
结构说明:
- pom.xml 代表maven的pom.xml
- plugin.properties 为开发环境下, 插件的元信息配置文件, 配置内容详见 插件包集成步骤。
- example 为项目的总Maven目录。
- example-runner 在运行环境下启动的模块。主要依赖example-main模块和插件中使用到的依赖包, 并且解决开发环境下无法找到插件依赖包的问题。可自行选择是否需要。(可选)
- example-main 该模块为项目的主程序模块。
- example-plugin-parent 该模块为插件的父级maven pom 模块, 主要定义插件中公共用到的依赖, 以及插件的打包配置。
- plugins 该文件夹下主要存储插件模块。上述模块中主要包括example-plugin1、example-plugin2 两个插件。
- example-plugin1、example-plugin2 分别为两个插件Maven包。
主程序集成步骤
主程序为上述目录结构中的 example-main 模块。 - 在主程序中新增maven依赖包
2. 实现并定义配置
实现 com.plugin.development.integration.IntegrationConfiguration 接口。
* 生产/部署 环境: deployment、prod
*/
@Value("${runMode:dev}") private String runMode;
/**
* 插件的路径
*/
@Value("${pluginPath:plugins}") private String pluginPath;
/**
* 插件文件的路径
*/
@Value("${pluginConfigFilePath:pluginConfigs}") private String pluginConfigFilePath;
@Override public RuntimeMode environment() { return RuntimeMode.byName(runMode);
}
@Override public String pluginPath() { return pluginPath;
}
@Override public String pluginConfigFilePath() { return pluginConfigFilePath;
}
/**
* 重写上传插件包的临时存储路径。只适用于生产环境
* @return String
*/
@Override public String uploadTempPath() { return "temp";
}
/**
* 重写插件备份路径。只适用于生产环境
* @return String
*/
@Override public String backupPath() { return "backupPlugin";
}
/**
* 重写插件RestController请求的路径前缀
* @return String
*/
@Override public String pluginRestControllerPathPrefix() { return "/api/plugins";
}
/**
* 重写是否启用插件id作为RestController请求的路径前缀。
* 启动则插件id会作为二级路径前缀。即: /api/plugins/pluginId/**
* @return String
*/
@Override public boolean enablePluginIdRestControllerPathPrefix() {
return true;
}
public String getRunMode() {
配置说明:
runMode:运行项目时的模式。分为开发环境(dev)、生产环境(prod)
pluginPath: 插件的路径。开发环境建议直接配置为插件模块的父级目录。例如: plugins。如果启动主程序时, 插件为加载, 请检查该配置是否正确。
pluginConfigFilePath: 在生产环境下, 插件的配置文件路径。在生产环境下, 请将所有插件使用到的配置文件统一放到该路径下管理。如果启动主程序时, 报插件的配置文件加载错误, 有可能是该该配置不合适导致的。
uploadTempPath: 上传插件包时使用。上传插件包存储的临时路径。默认 temp(相对于主程序jar路径)
backupPath: 备份插件包时使用。备份插件包的路径。默认: backupPlugin(相对于主程序jar路径)
pluginRestControllerPathPrefix: 插件RestController请求的路径前缀
enablePluginIdRestControllerPathPrefix: 是否启用插件id作为RestController请求的路径前缀。启动则插件id会作为二级路径前缀。即:
/api/plugins/pluginId/**
3. 配置PluginApplication
插件包集成步骤
- 插件包pom.xml配置说明
配置说明:
并且将该类的包路径(com.plugin.example.plugin1.DefinePlugin)配置在步骤1和2的plugin.class属性中。
4. 新增HelloPlugin1 controller
此步骤主要验证环境是否加载插件成功。
运行配置
-
配置模块 example-runner 的pom.xml
-
设置idea的启动
Working directory : D:\xx\xx\plugin-example Use classpath of module: plugin-exampe-runner
勾选: Include dependencies with “Provided” scope -
启动2步骤的配置。
-
访问插件中的Controller 验证。
浏览器输入:http://ip:port/api/plugins/example-plugin1/plugin1
响应并显示: hello plugin1 example
说明集成成功!






还没有评论,来说两句吧...