Flowable简洁通关

Flowable 快速上手指南

目录

  1. Flowable 概述
  2. Flowable 的安装与配置
  3. 流程审核操作

Flowable 概述

Flowable 是一个轻量级、高效可扩展的工作流和业务流程管理(BPM)引擎,支持在 Java 应用程序中实现复杂的工作流自动化。Flowable 最初是作为 Activiti 项目的一个分支发展而来的,但它现在已经成为一个独立的开源项目,并在企业级应用中得到了广泛使用。

Flowable 的安装与配置

在安装配置之前,我们首先要明确学习 Flowable 最基本的工具。

2.1 FlowableUI 安装

FlowableUI 是 Flowable 引擎的一部分,专注于提供用户界面(UI)功能,用于业务流程管理(BPM)和工作流自动化。Flowable 是一个开源的 BPMN(业务流程建模与标记法)引擎,支持复杂的工作流和业务规则。流程图基本上是由 FlowableUI 绘制的,完成后由代码进行操作使用。

安装步骤

  1. 下载 Flowable 6.7.2 源码包
    官方提供的 FlowableUI 集成在 Flowable 源码包中。在最新版本 7.0.0 中已经移除,因此需要从 6.7.2 版本中获取。进入 GitHub Release 页面 下载代码。

  2. 提取 flowable-ui.war 文件
    在下载的源码包中,找到对应的 flowable-ui.war 文件。

  3. 部署到 Tomcat 容器
    flowable-ui.war 文件部署到 Tomcat 容器中,注意不要部署在有中文的目录下。启动 Tomcat 服务后,访问 FlowableUI 地址:http://localhost:8080/flowable-ui

2.2 Flowable BPMN 插件下载

进入 IDEA 的插件下载界面,搜索并下载 Flowable BPMN 插件。该插件用于编辑和可视化 Flowable BPMN 图,并提供导航和流程调试支持。

2.3 集成 Spring Boot

Spring Boot 提倡约定大于配置。要开始工作,只需在项目中添加以下依赖:

<dependency>
    <groupId>org.flowable</groupId>
    <artifactId>flowable-spring-boot-starter</artifactId>
    <version>6.7.2</version>
</dependency>

因为 Flowable 需要数据库来存储数据,直接引用上述依赖可能会导致异常。建议在建立简单的 Spring Boot 项目后,添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.flowable</groupId>
    <artifactId>flowable-spring-boot-starter</artifactId>
    <version>6.7.2</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.14</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.2</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.21</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.21</version>
</dependency>

接下来在 application.yml 中配置如下信息:

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/flowable-learn?serverTimezone=UTC&nullCatalogMeansCurrent=true
    username: root
    password: 123456
    hikari:
      minimum-idle: 5
      idle-timeout: 600000
      maximum-pool-size: 10
      auto-commit: true
      pool-name: MyHikariCP
      max-lifetime: 1800000
      connection-timeout: 30000
      connection-test-query: SELECT 1
flowable:
  async-executor-activate: true # 关闭定时任务 JOB
  database-schema-update: true # 自动更新数据库表结构
server:
  port: 8082
logging:
  level:
    org:
      flowable: debug

启动项目后,若无报错信息即为成功。

流程审核操作

在下载并安装好 FlowableUI 后,可以尝试绘制流程图,例如审批人依次为 zhangsanlisi 的流程。

3.1 简单流程部署

此操作会根据路径解析传入的流程图 XML 文件。

@Autowired
private ProcessEngine processEngine;

@Test
void deployFlow() {
    Deployment deploy = processEngine.getRepositoryService().createDeployment()
            .addClasspathResource("process/HolidayDemo1.bpmn20.xml") // 部署一个流程
            .name("第一个流程案例")
            .deploy();
    System.out.println(deploy.getId());
}

部署成功后,相关信息会记录在以下三张表中:

  • act_ge_bytearray:记录流程定义的资源信息(XML 和流程图的图片信息)。
  • act_re_deployment:流程部署表,记录这次的部署行为。
  • act_re_procdef:流程定义表,记录这次部署动作对应的流程定义信息。

3.2 启动流程实例

@Test
void startProcess() {
    RuntimeService runtimeService = processEngine.getRuntimeService();
    // 方法一:根据 act_re_procdef 表中的 id 启动
    String processId = "Exanple01:2:a7de575b-a73b-11ef-a2cb-005056c00001";
    ProcessInstance processInstance = runtimeService.startProcessInstanceById(processId);
    System.out.println("processInstance.getId() = " + processInstance.getId());
    // 方法二:根据流程图中定义的 Key 启动
    // String processKey = "HolidayDemo1";
    // runtimeService.startProcessInstanceByKey(processKey);
}

启动流程实例后,可以在 act_ru_task 表中看到对应的记录。每启动一个流程实例,会在 act_hi_procinst 表中维护一条记录,并在 act_ru_execution 表中记录流程的分支。

3.3 流程审批

查询待办任务

@Test
void findTask() {
    TaskService taskService = processEngine.getTaskService();
    List<Task> list = taskService.createTaskQuery()
            .taskAssignee("zhangsan") // 根据审批人查询
            .list(); // 返回多条记录
    for (Task task : list) {
        System.out.println(task.getId());
    }
}

完成任务审批

@Test
void completeTask() {
    TaskService taskService = processEngine.getTaskService();
    String taskId = "926b41f8-7a4c-11ee-97fd-c03c59ad224
posted @ 2025-07-07 13:59  ruo_feng  阅读(1408)  评论(0)    收藏  举报
-->