一、什么是 Flowable UI?
Flowable UI 是 Flowable 官方提供的一套 Web 管理界面套件,用于可视化地设计、部署、监控和操作业务流程。它不是一个独立的工作流引擎,而是基于 Flowable 引擎构建的前端应用集合。
🔍 本质:
Flowable UI = Flowable 引擎的“操作面板” + “设计工具” + “监控中心”
二、Flowable UI 的核心组成
Flowable UI 包含 4 个独立但协同工作的 Web 应用,打包在同一个 Docker 镜像或 WAR 文件中:
| 应用 | 路径 | 作用 |
|---|---|---|
| IDM(身份管理应用程序) | /flowable-idm | 用户、组、权限管理(身份认证中心) |
| Modeler(建模器应用程序) | /flowable-modeler | 图形化设计 BPMN/DMN/CMMN 流程模型 |
| Task(任务应用程序) | /flowable-task | 用户任务中心:查看、办理待办任务 |
| Admin(管理员应用程序) | /flowable-admin | 系统监控与管理:查看流程实例、作业、数据库等 |
💡 默认访问地址:
http://localhost:8080/flowable-ui用户名和密码:admin/test
三、Flowable UI 的核心作用
| 作用 | 说明 |
|---|---|
| ✅ 零代码流程设计 | 业务人员可通过拖拽方式设计 BPMN 流程图,无需开发介入 |
| ✅ 集中式任务处理 | 所有用户可在 Task 应用中统一处理待办任务 |
| ✅ 流程全生命周期管理 | 从设计 → 部署 → 执行 → 监控 → 优化 |
| ✅ 用户与权限管理 | 通过 IDM 统一管理用户、角色、权限 |
| ✅ 实时监控与审计 | Admin 应用提供流程实例跟踪、性能分析、异常告警 |
| ✅ 降低集成成本 | 开箱即用,无需自行开发流程设计器和任务中心 |
四、Flowable UI 的工作原理
1. 架构图
+------------------+ +---------------------+
| Flowable UI |<----->| Flowable REST API |
| (Modeler/Task等) | HTTP | (flowable-rest 模块)|
+------------------+ +----------+----------+
|
v
+-----------------------------+
| Flowable 核心引擎 |
| (RuntimeService, TaskService等)|
+-----------------------------+
|
v
+-----------------------------+
| 数据库 |
| (ACT_RE_*, ACT_RU_*, ACT_HI_*)|
+-----------------------------+
2. 关键机制说明
(1) 依赖 Flowable REST API
- Flowable UI 不直接调用 Java API,而是通过 HTTP 调用 Flowable REST 服务(
flowable-rest模块) - 所有操作(如启动流程、完成任务)都转化为 REST 请求
- REST API 再调用底层的
RuntimeService、TaskService等
(2) 共享同一数据库
- Flowable UI 和你的 Spring Boot 应用必须连接同一个数据库
- 所有流程定义、实例、任务数据都存储在
ACT_*表中 - UI 和应用通过数据库实现数据联动
(3) 身份认证集成
- 默认使用 内置的 IDM 用户体系
- 你的 Spring Boot 应用可通过以下方式与 IDM 联动:
- 方式1:共用 IDM 数据库表(
ACT_ID_USER,ACT_ID_GROUP) - 方式2:集成外部认证系统(如 LDAP、OAuth2)
- 方式1:共用 IDM 数据库表(
五、Flowable UI 与 Spring Boot 3 应用的联动机制
🎯 核心问题:
“我的 Spring Boot 3 应用集成了 Flowable,Flowable UI 能看到我应用中的流程吗?”
✅ 答案:能!但必须满足以下条件
| 条件 | 说明 |
|---|---|
| 🔗 共用同一个数据库 | Spring Boot 应用和 Flowable UI 必须连接同一个数据库实例 |
| 📦 使用相同的 Flowable 表结构 | 表前缀必须一致(默认 ACT_) |
| 🔄 流程定义部署方式兼容 | 无论是通过 UI 部署,还是通过 Spring Boot 代码部署,数据都存入同一张表 |
联动场景详解
场景 1:在 Spring Boot 中启动流程 → 在 Flowable UI 中查看/操作
- Spring Boot 应用调用
runtimeService.startProcessInstanceByKey("myProcess") - 流程实例数据写入数据库
ACT_RU_EXECUTION、ACT_RU_TASK等表 - 用户登录 Flowable Task(
/flowable-task) - Task 应用查询
ACT_RU_TASK表,显示该用户的待办任务 - 用户在 UI 中点击“完成任务”,Task 应用调用 REST API → 更新数据库
- Spring Boot 应用可通过
HistoryService查询到任务已完成
✅ 完全双向联动:代码启动的流程,UI 可操作;UI 启动的流程,代码可监听。
场景 2:在 Flowable Modeler 中设计流程 → 在 Spring Boot 中使用
- 在 Modeler 中设计 BPMN 流程并点击“部署”
- 流程定义(BPMN XML)存入
ACT_RE_PROCDEF和ACT_GE_BYTEARRAY表 - Spring Boot 应用调用
repositoryService.createProcessDefinitionQuery()可查到该流程 - 通过
runtimeService.startProcessInstanceByKey("myNewProcess")启动
✅ 设计与执行分离:业务人员设计流程,开发人员专注业务逻辑。
六、在 Spring Boot 3 项目中与 Flowable UI 联动的实践方案
方案 A:独立部署 Flowable UI(推荐)
适用于生产环境,职责分离清晰
步骤 1:部署 Flowable UI(使用 Podman / Docker)
# 启动 PostgreSQL(与 Spring Boot 应用共用)
podman run -d --name flowable-db \
-e POSTGRES_DB=flowable \
-e POSTGRES_USER=flowable \
-e POSTGRES_PASSWORD=flowable \
-p 5432:5432 postgres:latest
# 启动 Flowable UI
podman run -d --name flowable-ui \
-p 8080:8080 \
-e SPRING_DATASOURCE_URL=jdbc:postgresql://host.containers.internal:5432/flowable \
-e SPRING_DATASOURCE_USERNAME=flowable \
-e SPRING_DATASOURCE_PASSWORD=flowable \
flowable/flowable-ui:latest
步骤 2:Spring Boot 3 应用配置(连接同一数据库)
# application.yml
spring:
datasource:
url: jdbc:postgresql://localhost:5432/flowable # 与 flowable-ui 连接到相同数据库
username: flowable
password: flowable
flowable:
# 关键:禁用自动建表!避免与 UI 冲突
database-schema-update: false
# 禁用自动部署(流程由 UI 管理)
check-process-definitions: false
✅ 优势:
- UI 负责流程设计与任务处理
- Spring Boot 负责业务逻辑集成(如调用外部系统)
- 数据库为唯一真相源
方案 B:将 Flowable REST 集成到 Spring Boot 应用中
适用于轻量级场景,减少部署组件
步骤 1:添加 Flowable REST 依赖
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter-rest</artifactId>
<version>7.2.0</version>
</dependency>
步骤 2:启用 REST API
// 启用 Flowable REST API(自动注册 /flowable-rest 路径)
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
步骤 3:访问内置 UI(需额外配置)
⚠️ 注意:
flowable-spring-boot-starter-rest不包含 Modeler/Task 等前端页面!
你仍需单独部署 Flowable UI,或自行构建前端。
七、关键配置说明(确保联动成功)
1. 数据库一致性(最重要!)
| 配置项 | Spring Boot 应用 | Flowable UI |
|---|---|---|
| 数据库 URL | jdbc:.../flowable | jdbc:.../flowable |
| 表前缀 | 默认 ACT_ | 默认 ACT_ |
| 数据库用户 | flowable | flowable |
2. 流程部署策略
| 场景 | Spring Boot 配置 | Flowable UI 操作 |
|---|---|---|
| 流程由 UI 设计 | check-process-definitions: false | 在 Modeler 中部署 |
| 流程由代码管理 | check-process-definitions: true | 不要在 UI 中部署同名流程 |
3. 用户体系集成
方式 1:共用 Flowable IDM 表
- Spring Boot 应用直接查询
ACT_ID_USER表做认证 - 适合简单场景
方式 2:外部认证 + 同步用户
// 在 Spring Security 中集成
@Bean
public UserDetailsService userDetailsService(IdentityService identityService) {
return username -> {
User user = identityService.createUserQuery().userId(username).singleResult();
if (user == null) throw new UsernameNotFoundException(username);
return org.springframework.security.core.userdetails.User
.withUsername(username)
.password("{noop}dummy") // Flowable UI 不校验密码
.roles("USER")
.build();
};
}
八、常见问题与解决方案
❓ Q1:为什么 Flowable UI 看不到 Spring Boot 启动的流程?
-
原因:数据库不一致(最常见!)
-
检查:
-- 在 Spring Boot 连接的数据库中执行 SELECT * FROM ACT_RU_TASK; -- 在 Flowable UI 连接的数据库中执行 SELECT * FROM ACT_RU_TASK; -
解决:确保两者连接同一个数据库实例
❓ Q2:如何在 Spring Boot 中监听 UI 启动的流程?
@Component
public class ProcessEventListener {
@EventListener
public void onProcessStarted(FlowableEngineEvent event) {
if (event.getType() == FlowableEngineEventType.PROCESS_STARTED) {
// 获取流程实例
ProcessInstance processInstance = (ProcessInstance) event.getData();
System.out.println("流程启动: " + processInstance.getProcessDefinitionId());
}
}
}
❓ Q3:能否禁用 Flowable UI 的某些模块?
-
可以!通过环境变量控制:
# 只启用 Modeler 和 Task -e FLOWABLE_UI_APPS=MODELER,TASK -
支持的值:
IDM,MODELER,TASK,ADMIN
九、总结:联动核心原则
| 原则 | 说明 |
|---|---|
| 🗃️ 单一数据源 | Spring Boot 应用与 Flowable UI 必须共用同一个数据库 |
| 🔌 通过 REST 通信 | UI 通过 HTTP 调用 Flowable REST API 操作引擎 |
| 🧩 职责分离 | UI 负责“人机交互”,Spring Boot 负责“系统集成” |
| 🔄 双向同步 | 任何一方的操作都会实时反映到另一方 |
💡 最佳实践:
- 开发阶段:使用独立 Flowable UI 容器 + Spring Boot 应用
- 生产环境:Flowable UI 作为独立服务部署,Spring Boot 应用通过 REST API 与之交互(或共用数据库)
通过以上机制,Flowable UI 与你的 Spring Boot 3 应用将形成一个完整的流程治理闭环,既满足业务人员的可视化需求,又保留开发者的扩展能力。
5580

被折叠的 条评论
为什么被折叠?



