# workflow **Repository Path**: huanlis/workflow ## Basic Information - **Project Name**: workflow - **Description**: 一个基于Java的工作流引擎,支持插件化扩展和动态加载。 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-29 - **Last Updated**: 2025-10-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Workflow Engine 一个基于Java的工作流引擎,支持插件化扩展和动态加载。 ## 项目结构 ``` workflow/ ├── workflow-core/ # 核心模块,定义工作流基础接口和类 ├── workflow-nodes/ # 节点模块,包含各种自定义工作流节点 │ ├── custom-a/ # 自定义节点A示例 │ └── custom-b/ # 自定义节点B示例 └── workflow-server/ # 服务模块,提供工作流引擎实现和启动入口 ``` ## 模块介绍 ### workflow-core (核心模块) 该模块定义了工作流的核心接口和基础类: - `Action`: 工作流动作接口,定义了执行动作的基本行为 - `ActionRegistry`: 动作注册中心,用于注册和管理所有的工作流动作 - `BaseDomain`: 基础领域对象,所有工作流中的实体都应继承此类 - `ActionException`: 动作执行异常类 ### workflow-nodes (节点模块) 该模块包含各种自定义工作流节点: #### custom-a (自定义节点A) 示例节点,包含两个动作实现: - `CalculateAction`: 计算动作,根据数量和单价计算总金额 - `ShowDataAction`: 显示数据动作,展示计算结果 #### custom-b (自定义节点B) 示例节点,可作为扩展节点的模板。 ### workflow-server (服务模块) 该模块提供工作流引擎的完整实现: - `AsyncWorkflowEngine`: 异步工作流引擎,负责加载和执行工作流 - `FlowRepository`: 流程存储库,管理流程的注册和执行 - `PluginJarClassLoader`: 插件JAR类加载器,支持动态加载插件 - `MainServer`: 服务启动入口 ## 核心功能 ### 1. 插件化架构 工作流引擎支持通过插件方式扩展功能。每个插件可以包含多个动作实现,通过SPI机制动态加载。 ### 2. 动态加载 通过自定义类加载器,支持在运行时动态加载和卸载插件JAR包。 ### 3. 异步执行 工作流引擎基于CompletableFuture实现异步执行,提高系统性能。 ### 4. 链路追踪 通过BaseDomain中的transactionId实现请求链路追踪。 ## 使用说明 ### 构建项目 ```bash mvn clean install ``` ### 运行服务 ```bash cd workflow-server mvn exec:java -Dexec.mainClass="com.huanlis.workflow.server.MainServer" ``` ### 自定义节点开发 1. 创建新的Maven模块 2. 实现Action接口 3. 在resources/META-INF/services目录下创建服务配置文件 4. 打包成JAR文件并放置到plugins目录下 ## 配置说明 ### flow.json 工作流配置文件,定义了流程的基本信息和包含的动作: ```json { "flowId": "1", "flowName": "test", "input": { "price": 123.0, "amount": 2 }, "actions": [ { "actionId": "1", "actionName": "calculate", "actionType": "com.huanlis.nodes.action.CalculateAction" }, { "actionId": "2", "actionName": "showData", "actionType": "com.huanlis.nodes.action.ShowDataAction" } ] } ``` ## 扩展开发 ### 创建自定义动作 1. 继承BaseDomain创建输入和输出数据类 2. 实现Action接口创建动作类 3. 在register方法中注册动作到ActionRegistry 示例: ```java public class CustomAction implements Action { @Override public void register(ActionRegistry actionRegistry) { actionRegistry.register("customAction", CustomAction.class.getCanonicalName(), this); } @Override public OutputDomain execute(InputDomain input) throws ActionException { // 实现具体业务逻辑 OutputDomain output = new OutputDomain(); // 处理逻辑 return output; } } ``` ## 技术栈 - Java 17 - Maven 3.x - Spring (可选集成) ## 许可证 MIT License