4、Flowable UI 详解:作用、原理与 Spring Boot 3 应用联动机制

【投稿赢 iPhone 17】「我的第一个开源项目」故事征集:用代码换C位出道! 10w+人浏览 1.6k人参与

一、什么是 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 再调用底层的 RuntimeServiceTaskService
(2) 共享同一数据库
  • Flowable UI 和你的 Spring Boot 应用必须连接同一个数据库
  • 所有流程定义、实例、任务数据都存储在 ACT_* 表中
  • UI 和应用通过数据库实现数据联动
(3) 身份认证集成
  • 默认使用 内置的 IDM 用户体系
  • 你的 Spring Boot 应用可通过以下方式与 IDM 联动:
    • 方式1:共用 IDM 数据库表ACT_ID_USER, ACT_ID_GROUP
    • 方式2:集成外部认证系统(如 LDAP、OAuth2)

五、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 中查看/操作
  1. Spring Boot 应用调用 runtimeService.startProcessInstanceByKey("myProcess")
  2. 流程实例数据写入数据库 ACT_RU_EXECUTIONACT_RU_TASK 等表
  3. 用户登录 Flowable Task/flowable-task
  4. Task 应用查询 ACT_RU_TASK 表,显示该用户的待办任务
  5. 用户在 UI 中点击“完成任务”,Task 应用调用 REST API → 更新数据库
  6. Spring Boot 应用可通过 HistoryService 查询到任务已完成

完全双向联动:代码启动的流程,UI 可操作;UI 启动的流程,代码可监听。


场景 2:在 Flowable Modeler 中设计流程 → 在 Spring Boot 中使用
  1. Modeler 中设计 BPMN 流程并点击“部署”
  2. 流程定义(BPMN XML)存入 ACT_RE_PROCDEFACT_GE_BYTEARRAY
  3. Spring Boot 应用调用 repositoryService.createProcessDefinitionQuery() 可查到该流程
  4. 通过 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
数据库 URLjdbc:.../flowablejdbc:.../flowable
表前缀默认 ACT_默认 ACT_
数据库用户flowableflowable

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 应用将形成一个完整的流程治理闭环,既满足业务人员的可视化需求,又保留开发者的扩展能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值