# boot-cloud-plugins **Repository Path**: pandason125/boot-cloud-plugins ## Basic Information - **Project Name**: boot-cloud-plugins - **Description**: 这是一个基于Spring Boot的插件架构示例项目,展示了如何构建可插拔的模块化应用。本项目解决了类加载和Bean冲突问题,同时保留了插件的动态特性。动态加载、卸载、启动、暂停、pf4j实现 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-10-08 - **Last Updated**: 2025-10-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ![输入图片说明](doc/img/1image.png) ![输入图片说明](doc/img/2image.png) ![输入图片说明](doc/img/3image.png) ![输入图片说明](doc/img/4image.png) | 分支名称 | 核心版本 | 工程结构 | 说明 | |---------|---------|---------|------| | `master` | Spring Boot 2.x | 单体结构 | 父工程、插件和主工程同属一个 Maven 项目,共用统一的项目结构 | | `origin/boot-3x` | Spring Boot 3.x | 单体结构 | 基于 Spring Boot 3.x 版本,保持父工程、插件和主工程在同一项目内的结构 | | `origin/boot3x-separation` | Spring Boot 3.x | 分离结构 | 父工程与插件工程独立存放于各自目录,为独立的 Spring Boot 项目 | ### 插件独立启动访问 GET http://localhost:1203/api/books/list ### 插件集成启动访问 GET http://localhost:1204/api/books/list # Boot Cloud Plugins 这是一个基于Spring Boot的插件架构示例项目,展示了如何构建可插拔的模块化应用。本项目解决了类加载和Bean冲突问题,同时保留了插件的动态特性。 ## 项目结构 ``` boot-cloud-plugins/ # 项目根目录 ├── boot-cloud-core/ # 核心应用模块 ├── boot-cloud-plugin-example/ # 示例插件模块 ├── plugins/ # 插件JAR存放目录 └── pom.xml # 总体父POM ``` ## 技术栈 **后端技术栈**: - Java 8 - Spring Boot 2.7.x - MyBatis-Plus 3.5.x(ORM框架) - PF4J 3.8.0(插件框架) - PF4J-Spring 0.7.0(PF4J与Spring集成) - MySQL 8.0.x(数据库) - Maven(构建工具) **前端技术栈**: - Vue 3(JavaScript框架) - Element Plus(UI组件库) - Axios(HTTP客户端) - Vite(构建工具) **项目架构**: - 多模块Maven项目 - 插件化架构(基于PF4J) - RESTful API设计 - 前后端分离 ## 架构设计 本项目采用基于Spring Boot和PF4J的插件架构,主要特点: 1. **统一类加载器** - 所有模块共享同一个类加载器,避免类加载冲突 2. **标准Spring开发** - 使用标准Spring控制器和服务,无需特殊接口 3. **自动组件注册** - 利用Spring的组件扫描自动注册插件控制器 4. **双模式运行** - 支持插件独立运行和集成到主应用两种模式 ### 插件运行模式 插件支持两种运行模式: 1. **独立模式** - 插件作为独立应用运行,便于开发和测试 - 配置文件: `application-standalone.yml` - API路径: `/api/books` 2. **集成模式** - 插件集成到核心应用中运行 - 配置文件: `application-integrated.yml` - API路径: `/api/plugins/example/books` ## 快速开始 ### 构建项目 ```bash # 克隆项目 git clone https://github.com/yourusername/boot-cloud-plugins.git cd boot-cloud-plugins # 构建项目 mvn clean package ``` ### 运行核心应用 ```bash java -jar boot-cloud-core/target/boot-cloud-core-1.0-SNAPSHOT.jar ``` 核心应用将启动在 http://localhost:1024 ### 运行插件(独立模式) ```bash java -jar boot-cloud-plugin-example/target/boot-cloud-plugin-example-1.0-SNAPSHOT-standalone.jar ``` 插件将启动在 http://localhost:1023 ## 开发指南 ### 创建新插件 1. 在项目根目录下创建新的Maven模块 2. 在父POM中添加新模块 3. 参考示例插件的结构实现功能 4. 构建项目,新插件将自动部署到plugins目录 ### IDEA开发配置 1. **插件独立运行配置**: - 主类: `com.example.plugins.example.PluginApplication` - Active profiles: `standalone` 2. **核心应用运行配置**: - 主类: `com.example.core.CoreApplication` - Active profiles: 默认(不需要特别设置) ### 插件开发规范 1. **配置文件**: - `application.yml` - 共享配置 2. **XML映射文件**: - 放在 `resources/mapper/` 目录下 - 在配置中指定 `mybatis-plus.mapper-locations=classpath*:mapper/**/*.xml` 3. **控制器路径**: - 接口: `/api/books` ## API文档 ### 图书管理API | 方法 | 路径 | 描述 | |------|-----------------------------------|------------| | GET | /api/plugins/example/books/list | 获取所有图书 | | GET | /api/plugins/example/books/{id} | 获取单本图书 | | POST | /api/plugins/example/books | 创建新图书 | | PUT | /api/plugins/example/books/{id} | 更新图书信息 | | DELETE | /api/plugins/example/books/{id} | 删除图书 | ## 常见问题 ### 类加载问题 本架构通过共享类加载器解决了类加载冲突问题,避免了"Invalid value type for attribute 'factoryBeanObjectType'"等错误。 ### Bean冲突问题 通过使用Spring profiles和条件注解,解决了Bean定义冲突问题,使插件能在两种模式下正常工作。 ### XML映射文件加载问题 将XML映射文件放在resources目录下,确保在两种模式下都能正确加载。 ## 贡献指南 欢迎提交Pull Request或Issue来改进这个项目。请确保您的代码符合以下规范: 1. 代码格式化符合项目风格 2. 添加必要的注释和文档 3. 提交前运行测试确保功能正常 ## 许可证 本项目采用MIT许可证。详情请参阅LICENSE文件。