飞龙工作流FlowLong:架构设计与技术栈
飞龙工作流(FlowLong)是一个功能强大的模块化工作流引擎,其架构设计围绕核心引擎、数据持久化层和框架适配层展开。技术栈基于Java生态,采用MyBatis-Plus实现数据访问,通过Spring Boot和Solon双框架支持提供灵活的集成方案,并利用JSON模型实现动态流程定义。
整体架构解析
飞龙工作流(FlowLong)是一个功能强大的工作流引擎,其架构设计充分考虑了模块化、扩展性和灵活性。以下是对其整体架构的详细解析:
核心模块划分
FlowLong的架构主要分为以下几个核心模块:
-
引擎核心(flowlong-core)
包含工作流引擎的核心逻辑,如流程定义、任务执行、条件分支处理等。核心类包括:FlowLongEngine: 引擎入口,负责配置和启动工作流。FlowLongContext: 上下文管理,提供流程实例的运行时环境。ProcessModel: 流程模型定义,用于解析和存储流程节点信息。NodeModel: 节点模型,表示流程中的各个节点(如审批节点、条件节点等)。
-
数据访问层(flowlong-mybatis-plus)
基于MyBatis-Plus实现,提供对流程实例、任务、参与者等数据的持久化操作。核心类包括:FlwInstanceDao: 流程实例数据访问。FlwTaskDao: 任务数据访问。FlwTaskActorDao: 任务参与者数据访问。
-
Spring Boot集成(flowlong-spring-boot-starter)
提供与Spring Boot的深度集成,支持自动配置和事件监听。核心类包括:FlowLongAutoConfiguration: 自动配置类,注册核心组件。EventTaskListener: 任务事件监听器。EventInstanceListener: 流程实例事件监听器。
-
Solon集成(flowlong-solon-plugin)
为Solon框架提供适配支持,核心类包括:XPluginImpl: Solon插件入口。SolonFlowJsonHandler: JSON处理适配器。
-
示例项目(flowlong-spring-boot-example / flowlong-solon-example)
提供Spring Boot和Solon框架的示例代码,帮助用户快速上手。
核心组件交互
以下是一个简化的核心组件交互流程图:
关键技术栈
FlowLong采用以下技术栈实现其功能:
| 技术栈 | 用途 |
|---|---|
| Java | 核心开发语言 |
| MyBatis-Plus | 数据访问层框架 |
| Spring Boot | 提供依赖注入、自动配置等能力 |
| Solon | 轻量级Java框架,支持插件化扩展 |
| JSON | 流程模型和数据的序列化与反序列化 |
| Mermaid | 用于生成流程图和交互图 |
流程模型设计
FlowLong的流程模型采用节点(Node)和连接线(Edge)的设计,支持多种节点类型:
扩展性设计
FlowLong通过以下方式支持扩展:
- 自定义表达式
通过实现FlowLongExpression接口,支持SpEL或其他表达式语言。 - 自定义任务参与者
通过实现TaskActorProvider接口,支持动态分配任务参与者。 - 事件监听
通过实现TaskListener和InstanceListener接口,支持任务和流程实例的事件监听。
总结
FlowLong的架构设计充分体现了模块化和扩展性,通过清晰的模块划分和灵活的扩展机制,能够满足复杂业务流程的需求。其核心组件和关键技术栈的选择,确保了高性能和易用性。
核心模块划分(Core、Solon、Spring Boot)
飞龙工作流(FlowLong)的核心架构分为三个主要模块:Core、Solon和Spring Boot。每个模块针对不同的技术栈和场景设计,提供了灵活的集成方式。以下是各模块的详细划分和功能说明:
1. Core 模块
Core 模块是 FlowLong 的核心引擎,负责工作流的核心逻辑和基础功能实现。它不依赖任何特定的框架,可以独立运行或集成到其他框架中。
核心功能
- 流程定义与解析:通过
ProcessModelParser解析流程定义,生成可执行的ProcessModel。 - 流程执行引擎:
FlowLongEngine提供流程实例的创建、启动、执行和终止功能。 - 任务管理:
TaskService和RuntimeService负责任务的创建、分配和执行。 - 条件节点处理:
ConditionNodeHandler处理条件分支逻辑。 - 缓存与锁机制:
FlowCache和JobLock提供流程实例的缓存和并发控制。
关键类
FlowLongEngineImpl:流程引擎的核心实现。Execution:流程执行的上下文。ProcessModel:流程定义的模型表示。TaskServiceImpl和RuntimeServiceImpl:任务和运行时服务的实现。
示例代码
// 创建流程实例
FlwInstance instance = runtimeService.createInstance(process, creator, args, nodeModel, false);
// 启动流程
runtimeService.startProcess(instance.getId());
2. Solon 模块
Solon 模块为 Solon 框架提供了 FlowLong 的集成支持,通过插件和自动配置简化了工作流的集成和使用。
核心功能
- 自动配置:
FlowLongAutoConfiguration自动注册必要的 Bean。 - 插件机制:
XPluginImpl提供 Solon 插件入口。 - JSON 处理:
SolonFlowJsonHandler提供 JSON 序列化和反序列化支持。 - 表达式解析:
SolonFlowLongExpression支持 Solon 环境下的表达式解析。
关键类
XPluginImpl:Solon 插件入口。FlowLongAutoConfiguration:自动配置类。SolonFlowJsonHandler:JSON 处理器。
示例代码
// 在 Solon 中启用 FlowLong 插件
@XBean
public class MyPlugin implements XPlugin {
@Override
public void start(AppContext context) {
context.beanScan(FlowLongAutoConfiguration.class);
}
}
3. Spring Boot 模块
Spring Boot 模块为 Spring Boot 应用提供了 FlowLong 的 Starter 支持,通过自动配置和事件监听简化了工作流的集成。
核心功能
- 自动配置:
FlowLongAutoConfiguration自动注册必要的 Bean。 - 事件监听:
EventInstanceListener和EventTaskListener提供流程和任务的事件监听支持。 - JSON 处理:
FlowJacksonHandler提供 JSON 序列化和反序列化支持。 - 表达式解析:
SpelFlowLongExpression支持 Spring 环境下的表达式解析。
关键类
FlowLongAutoConfiguration:自动配置类。EventInstanceListener和EventTaskListener:事件监听器。FlowJacksonHandler:JSON 处理器。
示例代码
// 在 Spring Boot 中启用 FlowLong
@SpringBootApplication
public class FlowLongApplication {
public static void main(String[] args) {
SpringApplication.run(FlowLongApplication.class, args);
}
}
模块对比
| 模块 | 适用框架 | 核心功能 | 关键特性 |
|---|---|---|---|
| Core | 无依赖 | 流程引擎、任务管理、条件节点处理 | 独立运行,高度灵活 |
| Solon | Solon | 自动配置、插件支持、JSON 处理 | 轻量级,适合 Solon 生态 |
| Spring Boot | Spring Boot | 自动配置、事件监听、SpEL 表达式支持 | 适合 Spring Boot 生态,开箱即用 |
通过以上模块划分,FlowLong 能够灵活适配不同的技术栈和业务场景,满足开发者的多样化需求。
技术栈与依赖(MyBatis Plus、JSON模型)
飞龙工作流(FlowLong)是一个功能强大的工作流引擎,其技术栈和依赖设计充分体现了现代Java开发的灵活性和高效性。以下将重点介绍项目中核心的技术栈组件及其依赖关系,特别是MyBatis Plus和JSON模型的应用。
MyBatis Plus:高效的数据持久化
MyBatis Plus作为ORM框架,为FlowLong提供了强大的数据库操作能力。其核心优势在于简化了CRUD操作,同时支持动态SQL和灵活的查询构建。以下是MyBatis Plus在项目中的典型应用场景:
-
实体类与数据库表映射
项目中的实体类(如FlwInstance、FlwTask等)通过注解与数据库表直接关联,例如:@TableName("flw_instance") public class FlwInstance { @TableId(type = IdType.AUTO) private Long id; private String businessKey; // 其他字段 } -
动态SQL支持
MyBatis Plus的动态SQL功能使得复杂查询变得简单。例如,FlwTaskDaoImpl中的查询方法:@Override public FlwTask selectById(Long id) { return getById(id); } -
分页与性能优化
结合MyBatis Plus的分页插件,FlowLong实现了高效的分页查询,例如:Page<FlwTask> page = new Page<>(1, 10); QueryWrapper<FlwTask> wrapper = new QueryWrapper<>(); wrapper.eq("instance_id", instanceId); taskDao.selectPage(page, wrapper); -
事务管理
通过@Transactional注解,FlowLong确保了数据操作的原子性和一致性,特别是在流程实例的创建和任务执行过程中。
JSON模型:灵活的流程定义
FlowLong使用JSON作为流程模型的定义格式,这种设计使得流程配置更加灵活且易于扩展。以下是JSON模型在项目中的关键应用:
-
流程模型解析
通过ProcessModelParser类,FlowLong将JSON格式的流程定义解析为Java对象。例如:public ProcessModel parse(String content, String cacheKey, boolean redeploy) { // 解析JSON内容为ProcessModel对象 } -
动态节点配置
JSON模型支持动态配置节点属性,例如条件分支、并行分支等。以下是一个简单的JSON流程定义示例:{ "nodes": [ { "nodeKey": "start", "type": "START", "nextNodeKey": "approval" }, { "nodeKey": "approval", "type": "APPROVAL", "assignee": "user1", "nextNodeKey": "end" } ] } -
模型缓存与重载
ProcessModelCache接口负责缓存解析后的JSON模型,以提高性能。例如:public interface ProcessModelCache { ProcessModel get(String cacheKey); void put(String cacheKey, ProcessModel processModel); } -
条件表达式
JSON模型中的条件节点(ConditionNode)支持动态表达式,例如:{ "nodeKey": "condition", "type": "CONDITION", "expression": "${amount > 1000}", "nextNodeKey": "approval" }
技术栈的协同作用
MyBatis Plus和JSON模型在FlowLong中协同工作,形成了高效的数据持久化和灵活的流程定义能力。例如:
- 数据存储:MyBatis Plus将流程实例、任务等数据持久化到数据库。
- 流程定义:JSON模型定义了流程的逻辑结构,解析后由引擎执行。
- 动态扩展:JSON的灵活性使得FlowLong可以轻松支持新的节点类型和业务场景。
以下是一个简单的流程图,展示了技术栈的协同关系:
通过MyBatis Plus和JSON模型的结合,FlowLong实现了高性能、高灵活性的工作流引擎设计,满足了复杂业务场景的需求。
扩展性与插件机制
飞龙工作流(FlowLong)在设计之初就充分考虑了系统的扩展性与插件机制,通过灵活的接口定义和模块化设计,使得开发者能够轻松地扩展功能或替换默认实现。以下从核心接口、插件机制和扩展点三个方面详细解析其设计。
核心接口与扩展点
FlowLong通过一系列核心接口定义扩展点,开发者可以通过实现这些接口来定制化功能。以下是一些关键接口及其作用:
-
FlowJsonHandler
用于处理JSON序列化与反序列化逻辑,开发者可以自定义JSON处理库(如Jackson、Gson等)。 -
ConditionNodeHandler
负责条件节点的处理逻辑,支持自定义条件判断规则。 -
TaskActorProvider
定义任务处理人的获取逻辑,支持动态分配任务处理人(如基于角色、部门等)。 -
TaskTrigger
任务触发逻辑的扩展点,支持自定义任务触发行为(如定时触发、事件触发等)。 -
FlowLongExpression
表达式解析接口,支持动态表达式(如SpEL、Groovy等)的扩展。
插件机制
FlowLong通过Spring Boot和Solon的自动配置机制实现插件化加载。开发者只需实现相关接口并注册为Bean,即可无缝集成到系统中。例如:
-
Spring Boot Starter
在FlowLongAutoConfiguration中,通过@ConditionalOnMissingBean注解动态加载默认实现或用户自定义实现:@Bean @ConditionalOnMissingBean public FlowLongExpression flowLongExpression() { return new SpelFlowLongExpression(); } -
Solon Plugin
通过XPluginImpl启动插件,动态加载扩展模块:@Override public void start(AppContext context) { context.beanScan("com.aizuda.bpm.solon"); }
扩展场景示例
以下是一个动态任务分配的场景,通过实现TaskActorProvider接口扩展任务处理人逻辑:
public class CustomTaskActorProvider implements TaskActorProvider {
@Override
public Integer getActorType(NodeModel nodeModel) {
// 自定义逻辑:根据节点属性动态返回处理人类型
return nodeModel.getExtendConfig().containsKey("customType") ? 1 : 0;
}
}
表格:扩展点与实现类
| 扩展点 | 默认实现类 | 功能描述 |
|---|---|---|
FlowJsonHandler | FlowJacksonHandler | 基于Jackson的JSON处理 |
FlowLongExpression | SpelFlowLongExpression | 基于SpEL的表达式解析 |
TaskActorProvider | GeneralTaskActorProvider | 通用任务处理人分配逻辑 |
TaskTrigger | DefaultTaskTrigger | 默认任务触发逻辑 |
通过以上设计,FlowLong实现了高度的灵活性和可扩展性,开发者可以根据业务需求轻松定制或替换核心组件。
总结
FlowLong通过清晰的模块化架构(Core/Solon/Spring Boot)和扩展性设计(自定义表达式、任务参与者、事件监听)实现了工作流引擎的高灵活性与易用性。其技术栈选择(MyBatis-Plus/JSON/SpEL)兼顾性能与开发效率,插件机制支持快速适配不同业务场景,最终形成了一套可扩展、高性能的轻量级工作流解决方案。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



