Flowable 引擎入门指南:Java 工作流、BPMN/CMMN/DMN 三引擎与部署形态全解析
【免费下载链接】flowable-engineA compact and highly efficient workflow and Business Process Management (BPM) platform for developers, system admins and business users.项目地址: https://gitcode.com/GitHub_Trending/fl/flowable-engine
Flowable 是一个紧凑、高效的工作流与业务流程管理(BPM)平台,面向开发者、系统管理员与业务用户,本指南围绕其官方 README 展开,系统梳理它的核心定位、Apache 2.0 许可、JDK 17+ 运行环境、源码结构、嵌入式/服务化/云端等多种部署形态以及 Spring 集成与 REST API,并深入仓库源码印证引擎的初始化原理。读完本文,你将掌握 Flowable 的选型依据、环境准备、引擎构建与启动方式,以及如何在本地通过 Docker 快速拉起一套可用的 REST 服务。
Flowable 是什么:三大引擎与平台定位
Flowable(读作 /flowəb(ə)l/)在 README 中被定义为:
a compact and highly efficient workflow and Business Process Management (BPM) platform for developers, system admins and business users.
它是一套用 Java 编写、经长期生产验证的轻量级流程引擎组合,具体包含:
- BPMN 流程引擎(Process Engine):用于编排以人机交互或系统任务为核心的工作流;
- CMMN 案例引擎(Case Engine):用于面向目标、可动态演进的案例管理场景;
- DMN 规则引擎(Decision Engine):用于将决策逻辑从流程中剥离,以决策表/决策需求图方式集中管理。
三大引擎在仓库中均有独立模块承载,例如 flowable-engine、flowable-cmmn-engine 与 flowable-dmn-engine,并各自配套了 model、converter、image-generator、rest、spring 等子模块。此外仓库还包含 app 应用引擎(flowable-app-engine)、事件注册(flowable-event-registry)、批处理服务、任务服务、作业服务等模块,整体模块化程度很高,可按需组合引入。
许可证与获取方式
Flowable 采用Apache V2 许可证(Apache License 2.0)发布,允许自由使用、修改与商用分发。仓库根目录的 LICENSE 文件即为许可证全文。
获取 Flowable 的途径主要有两条:
- 下载发行包:官方下载页面提供包含预构建 jar、war 与文档的发行包;
- 获取源码:README 说明发行包中大部分源码以 jar 形式附带,完整源码则托管在 Flowable 官方 GitHub 仓库(flowable-engine)。
对当前仓库而言,它就是一个完整的源码工程:根目录 pom.xml 以org.flowable:flowable-root作为聚合 POM(当前版本号为8.1.0-SNAPSHOT),通过<modules>依次聚合了modules/flowable-bom、modules/flowable-parent、modules/flowable-dependencies以及 bpmn-model、engine-common、variable-service、task-service、job-service、idm-engine、dmn-engine、cmmn-engine、engine、spring-security、mail 等全部子模块,可以基于根 POM 一键构建整个工程。
运行环境要求:JDK 17+
README 明确给出了版本与运行时的对应关系:
- Flowable V7(含当前主分支)要求 JDK 17 或更高版本。可以直接使用 Linux 发行版自带的 JDK,或前往 Adoptium 网站下载Latest LTS Release安装包,按页面指引完成安装;
- Flowable V6 仍在维护中,其
flowable6.x分支支持 Java 8+。
安装完成后,在命令行执行以下命令验证 JDK 是否就绪:
java -version命令应输出当前安装的 JDK 版本号。仓库根 pom.xml 中也定义了<jdk.version>17</jdk.version>,与 README 的 JDK 17+ 要求完全一致。
从零构建一个流程引擎:源码级初始化原理
三种标准构建方式
引擎的构建入口是 ProcessEngineConfiguration,其类注释给出了三种最常用的创建方式:
方式一:基于默认配置文件flowable.cfg.xml(生产常用)
ProcessEngine processEngine = ProcessEngineConfiguration .createProcessEngineConfigurationFromResourceDefault() .buildProcessEngine();createProcessEngineConfigurationFromResourceDefault()内部实际调用createProcessEngineConfigurationFromResource("flowable.cfg.xml", "processEngineConfiguration"),即从 classpath 根目录读取名为flowable.cfg.xml的配置文件,并定位其中 id 为processEngineConfiguration的 bean。
方式二:纯编程式独立配置(无需配置文件)
ProcessEngine processEngine = ProcessEngineConfiguration .createStandaloneProcessEngineConfiguration() .buildProcessEngine();这会创建一个"独立模式"(Standalone)引擎,默认连接远程 H2 数据库(jdbc:h2:tcp://localhost/flowable)。独立模式意味着引擎自己管理 JDBC 连接上的事务,每个服务方法一个事务。
方式三:内存数据库配置(测试首选)
ProcessEngine processEngine = ProcessEngineConfiguration .createStandaloneInMemProcessEngineConfiguration() .buildProcessEngine();此方式创建连接内存 H2 数据库的引擎,默认数据库 schema 策略为create-drop,非常适合单元测试场景。
自定义配置:无论哪种方式,都可以在调用buildProcessEngine()之前通过 setter 链调整参数,例如:
ProcessEngine processEngine = ProcessEngineConfiguration .createProcessEngineConfigurationFromResourceDefault() .setMailServerHost("gmail.com") .setJdbcUsername("mickey") .setJdbcPassword("mouse") .buildProcessEngine();从源码看,ProcessEngineConfiguration 还内置了大量可配置项的默认值,例如:
processEngineName默认"default";history默认级别为HistoryLevel.AUDIT.getKey()(审计级别);idBlockSize默认 2500(ID 块大小,减少数据库序列访问);defaultFailedJobWaitTime与asyncFailedJobWaitTime默认 10 秒(失败作业重试等待时间);isCreateDiagramOnDeploy默认true(部署时自动生成流程示意图);- 历史清理相关:
enableHistoryCleaning默认关闭,cleanInstancesEndedAfter默认 365 天,cleanInstancesBatchSize默认 100。
ProcessEngines:服务器环境下的引擎注册表
在应用服务器(Servlet 容器)环境中,通常使用 ProcessEngines 这个辅助类统一管理引擎生命周期:
init():扫描 classpath 上的flowable.cfg.xml(纯 Flowable 风格配置)与flowable-context.xml(Spring 风格配置),为每一份配置构建一个 ProcessEngine 并注册到内部 Map 中,同时记录EngineInfo。源码注释特别提示:不存在懒加载,必须确保 context-listener 已配置或引擎已显式创建注册;getDefaultProcessEngine()/getProcessEngine(name):按名称获取引擎,未初始化时会自动触发init();registerProcessEngine()/unregister():编程式注册与注销引擎;destroy():关闭全部已注册引擎,应在服务器关闭时调用;retry(resourceUrl):对先前初始化失败的配置进行重试。
init()的查找逻辑会先通过classLoader.getResources("flowable.cfg.xml")收集所有匹配资源并用Set<URL>去重(防止类加载器返回重复 URL 导致重复启动),再逐个调用initProcessEngineFromResource;随后再查找flowable-context.xml并通过反射调用org.flowable.spring.SpringConfigurationHelper.buildProcessEngine完成 Spring 风格引擎的构建。
ProcessEngine 暴露的核心服务
构建完成后,ProcessEngine 接口提供了访问全部 BPM/工作流能力服务的入口:
| 服务 | 职责 |
|---|---|
RepositoryService | 部署管理(Deployment)与流程定义(ProcessDefinition)的查询与维护 |
RuntimeService | 启动流程实例(ProcessInstance)、运行时流程实例搜索 |
TaskService | 人工任务管理:认领(claim)、完成(complete)、指派(assign)等 |
IdentityService | 管理用户、用户组及其关系 |
ManagementService | 引擎管理、运维操作 |
HistoryService | 查询进行中与已结束流程实例的历史信息 |
FormService | 表单数据服务 |
DynamicBpmnService | 运行时动态修改 BPMN 元素 |
ProcessMigrationService | 流程实例跨版本迁移 |
类注释强调:通常一个最终用户应用只需要一个中心 ProcessEngine 实例,构建引擎是开销较大的操作应当避免重复执行,建议存放在静态字段或 JNDI 中;ProcessEngine 本身是线程安全对象,无需额外加锁。
部署形态:从嵌入式到云原生
README 明确指出 Flowable 可以:
- 嵌入式运行在 Java 应用中:把引擎 jar 直接加入依赖,通过
ProcessEngineConfiguration构建引擎,与应用共享进程与事务; - 作为服务运行在服务器上:例如打包为 Web 应用部署到 Servlet 容器,或使用官方
flowable-rest应用提供 REST 服务; - 集群与云端运行:引擎本身支持多实例部署,配合消息队列等外部组件实现分布式执行。
用 Docker 快速体验 REST 服务
仓库的 docker 目录提供了预配置的Flowable REST运行方案(基于 Docker Compose)。以 REST + PostgreSQL 为例,启动脚本为:
./rest-postgres.sh start|stop|info- 服务地址:
http://localhost:8080/flowable-rest/ - Swagger 文档:
http://localhost:8080/flowable-rest/docs/ - 默认登录:
rest-admin/test
对应的组合编排文件 docker/config/rest-postgres.yml 展示了关键配置:
services: flowable-rest-app: image: flowable/flowable-rest depends_on: - flowable-rest-db environment: - SERVER_PORT=8080 - SPRING_DATASOURCE_DRIVER-CLASS-NAME=org.postgresql.Driver - SPRING_DATASOURCE_URL=jdbc:postgresql://flowable-rest-db:5432/flowable - SPRING_DATASOURCE_USERNAME=flowable - SPRING_DATASOURCE_PASSWORD=flowable - FLOWABLE_COMMON_APP_IDM-ADMIN_USER=admin - FLOWABLE_COMMON_APP_IDM-ADMIN_PASSWORD=test ports: - 8080:8080 entrypoint: ["./wait-for-something.sh", "flowable-rest-db", "5432", "PostgreSQL", "/flowable-entrypoint.sh"] flowable-rest-db: image: postgres:9.6-alpine environment: - POSTGRES_PASSWORD=flowable - POSTGRES_USER=flowable - POSTGRES_DB=flowable该编排会先通过wait-for-something.sh等待 PostgreSQL 就绪再启动 REST 应用,并将8080端口映射到宿主机。若需要高可用/负载均衡场景,仓库还提供了 HAProxy + PostgreSQL 的rest-loadbalancer-postgres.sh start|stop|scale|info方案。此外,docker/README.md 提到自 6.7.3 起 Docker 镜像使用 cosign 签名,可用仓库根目录的docker/cosign.pub公钥执行cosign verify -key cosign.pub flowable/flowable-rest:6.7.3进行校验。
数据库初始化
引擎在首次启动时会根据配置的 schema 策略自动创建所需表结构。仓库在 distro/sql/create/all 目录下提供了 MySQL、PostgreSQL、Oracle、DB2、MSSQL 五种数据库的建表脚本(如flowable.mysql.all.create.sql),同时 distro/sql/upgrade/all 目录按版本序列存放了从 5.99.0 到 8.0.0 的增量升级脚本,便于在升级引擎时同步演进数据库。
Spring 与 Spring Boot 集成
README 强调 Flowable 与 Spring 的"完美集成"(integrates perfectly with Spring),这在仓库模块结构中得到了充分体现:
- flowable-spring:Spring 集成核心模块,ProcessEngines 中的
init()会通过org.flowable.spring.SpringConfigurationHelper解析flowable-context.xml并构建引擎,因此可以在 Spring 容器中以声明式方式配置引擎、事务管理器与服务 Bean; - flowable-spring-boot/flowable-spring-boot-starters/flowable-spring-boot-autoconfigure:提供 Spring Boot 自动配置(共 89 个 Java 源文件),配合
flowable-spring-boot-starter-process、-cmmn、-dmn、-rest、-actuator等 starter,可在 Spring Boot 应用中通过属性文件(如spring.datasource.*、flowable.*)完成零 XML 配置; - 仓库还包含 flowable-spring-security 用于与 Spring Security 集成,以及 flowable-cdi 支持 CDI 环境。
flowable-spring-boot-samples目录下提供了 sample-app、sample-process、sample-cmmn、sample-dmn、sample-ldap、sample-jpa、sample-rest-api 等大量可运行示例,是学习集成的首选参考。
丰富的 Java 与 REST API
README 将"丰富的 Java 和 REST API"作为引擎"编排人工或系统活动"的理想能力来源:
- Java API:即上文介绍的
ProcessEngine各服务接口(RuntimeService、TaskService、HistoryService等),可在嵌入式应用中直接调用; - REST API:由 flowable-rest(219 个 Java 源文件)与 flowable-app-rest 模块实现,支持通过 HTTP 完成部署、启动流程、任务办理、查询历史等操作;REST 模块自带 106 个测试类验证接口行为。仓库 public-api/references 目录还维护了 OpenAPI(YAML)与 Swagger 规范文档,覆盖 process、decision、cmmn、app、eventregistry 等子系统的接口定义,方便生成客户端与在线调试。
建模工具:Flowable Design
流程定义(BPMN、CMMN、DMN 等模型)需要使用建模工具绘制。README 说明 Flowable 提供Flowable Cloud Design免费在线建模应用,支持 CMMN、BPMN、DMN 及其他模型类型;注册 Flowable 账户即可开始使用。仓库内的 docs/docusaurus/docs/assets/bpmn、docs/docusaurus/docs/assets/cmmn、docs/docusaurus/docs/assets/dmn 目录存放了大量示例模型图片与文档,可直观了解 BPMN/CMMN/DMN 图形的呈现效果;模型文件经 flowable-bpmn-converter、flowable-cmmn-converter、flowable-dmn-xml-converter 解析后交给对应引擎执行。
参与贡献与问题反馈
README 对社区协作给出了明确指引:
- 贡献代码:Flowable 的贡献流程与开发规范记录在其官方 Wiki 中,参与前应先阅读;
- 报告问题:README 引用了一篇经典的《提问的智慧》(How To Ask Questions The Smart Way),建议开发者在提问前先自行排查、提供可复现信息;问题与讨论可以发布到 Flowable 官方论坛,缺陷则提交到官方 issue 跟踪系统。
从仓库结构看,本仓库也具备完整的质量保障体系:各模块均带测试目录(如 flowable-engine 有 639 个测试类、flowable-cmmn-engine 有 225 个测试类、flowable5-test 有 439 个测试类),scripts 目录提供run-compatibility-tests.sh、run-flowable5-tests.sh等测试运行脚本,顶层还有 mvnw Maven Wrapper 便于无本地 Maven 环境下执行构建。
小结
本文以仓库 README.md 为主线,系统梳理了 Flowable 的三引擎定位、Apache 2.0 许可、JDK 17+ 环境要求、flowable.cfg.xml/Spring 配置下的引擎构建与ProcessEngines初始化机制、嵌入式/服务化/Docker 容器/集群云端四种部署形态,以及 Spring 生态、REST API 与 Flowable Design 建模工具。无论你是要在 Java 应用中嵌入式编排业务流,还是以服务化方式为团队提供流程平台,都可以从本文的源码路径与配置文件出发,在仓库内继续深入对应的模块与示例代码。
【免费下载链接】flowable-engineA compact and highly efficient workflow and Business Process Management (BPM) platform for developers, system admins and business users.项目地址: https://gitcode.com/GitHub_Trending/fl/flowable-engine
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考