Flowable工作流引擎:Spring Boot集成

一、环境准备
  1. 技术栈

    • JDK 11+
    • Spring Boot 2.7.x
    • Flowable 6.8.0
    • MySQL 8.0
  2. 依赖配置

    pom.xml 中添加核心依赖:

    xml 复制代码
    <dependencies>
        <!-- Spring Boot Web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- Flowable Starter -->
        <dependency>
            <groupId>org.flowable</groupId>
            <artifactId>flowable-spring-boot-starter</artifactId>
            <version>6.8.0</version>
        </dependency>
        <!-- MySQL Driver -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.27</version>
        </dependency>
    </dependencies>
    
    AI写代码xml
    12345678910111213141516171819
二、数据库配置

application.yml配置 MySQL(连接:

yaml 复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/flowable?useSSL=false&serverTimezone=UTC
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
  flowable:
    # 数据库表自动更新
    database-schema-update: true
    # 历史数据级别(full记录最完整)
    history-level: full
    # 关闭异步执行器(开发阶段)
    async-executor-activate: false

AI写代码yaml
12345678910111213
三、流程定义与部署
  1. 设计 BPMN 流程

    使用 Flowable Modeler (bpmn-js) 或在线工具设计请假流程,保存为 leave-request.bpmn20.xml,结构:

    ini 复制代码
    <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL">
      <process id="leaveProcess" name="请假流程">
        <startEvent id="start" />
        <userTask id="applyTask" name="提交申请" />
        <exclusiveGateway id="decision" />
        <userTask id="managerApproval" name="经理审批" />
        <endEvent id="end" />
        <sequenceFlow sourceRef="start" targetRef="applyTask" />
        <sequenceFlow sourceRef="applyTask" targetRef="decision" />
        <sequenceFlow sourceRef="decision" targetRef="managerApproval" conditionExpression="${days <= 3}" />
        <sequenceFlow sourceRef="managerApproval" targetRef="end" />
      </process>
    </definitions>
    
    AI写代码xml
    12345678910111213
  2. 部署流程

    将 BPMN 文件放入 src/main/resources/processes/ 目录,Spring Boot 启动时自动部署。或通过代码动态部署:

    java 复制代码
    @Autowired
    private RepositoryService repositoryService;
    
    public void deployProcess() {
        InputStream bpmnStream = new FileInputStream("path/to/leave-request.bpmn20.xml");
        repositoryService.createDeployment()
            .addInputStream("leave-request.bpmn20.xml", bpmnStream)
            .deploy();
    }
    
    AI写代码java
    运行
    123456789
四、流程实例操作
  1. 启动流程实例

    typescript 复制代码
    @Autowired
    private RuntimeService runtimeService;
    
    public String startProcess() {
        Map<String, Object> variables = new HashMap<>();
        variables.put("days", 3); // 流程变量
        ProcessInstance instance = runtimeService.startProcessInstanceByKey("leaveProcess", variables);
        return instance.getId();
    }
    
    AI写代码java
    运行
    123456789
  2. 查询与完成任务

    typescript 复制代码
    @Autowired
    private TaskService taskService;
    
    public void completeTask(String taskId) {
        Map<String, Object> variables = new HashMap<>();
        variables.put("approved", true);
        taskService.complete(taskId, variables);
    }
    
    public List<Task> getTasks(String assignee) {
        return taskService.createTaskQuery()
            .taskAssignee(assignee)
            .list();
    }
    
    AI写代码java
    运行
    1234567891011121314
五、动态任务分配
  1. 静态分配

    在 BPMN 中直接指定执行人:

    ini 复制代码
    <userTask id="managerApproval" name="经理审批" flowable:assignee="manager1" />
    
    AI写代码xml
    1
  2. 动态分配

    通过表达式或 API 动态指定:

    javascript 复制代码
    // 在启动流程时设置变量
    variables.put("nextApprover", "user123");
    
    // 在BPMN中使用表达式
    <userTask id="task" name="动态任务" flowable:assignee="${nextApprover}" />
    
    AI写代码java
    运行
    12345
六、历史数据查询
scss 复制代码
@Autowired
private HistoryService historyService;

public List<HistoricProcessInstance> getHistoryInstances() {
    return historyService.createHistoricProcessInstanceQuery()
        .finished()
        .list();
}

public List<HistoricTaskInstance> getHistoryTasks(String processInstanceId) {
    return historyService.createHistoricTaskInstanceQuery()
        .processInstanceId(processInstanceId)
        .list();
}

AI写代码java
运行
1234567891011121314
七、扩展功能
  1. 会签任务

    使用 flowable:candidateUsersflowable:candidateGroups 实现多用户审批:

    xml 复制代码
    <userTask id="ccApproval" name="会签审批">
      <documentation>需所有成员审批通过</documentation>
      <multiInstanceLoopCharacteristics isSequential="false" flowable:collection="ccList" flowable:elementVariable="ccUser">
        <completionCondition>${nrOfCompletedInstances/nrOfInstances >= 1}</completionCondition>
      </multiInstanceLoopCharacteristics>
    </userTask>
    
    AI写代码xml
    123456
  2. 邮件通知

    集成 Spring Mail,在任务分配时发送通知:

    scss 复制代码
    @Autowired
    private JavaMailSender mailSender;
    
    public void sendNotification(String to, String taskId) {
        mailSender.send(new SimpleMailMessage() {{
            setTo(to);
            setSubject("新任务待处理");
            setText("您有新任务,ID: " + taskId);
        }});
    }
    
    AI写代码java
    运行
    12345678910
八、Docker 部署
  1. 打包应用

    go 复制代码
    mvn clean package
    
    AI写代码bash
    1
  2. 构建 Docker 镜像

    bash 复制代码
    FROM openjdk:11-jre
    COPY target/flowable-demo.jar /app.jar
    EXPOSE 8080
    ENTRYPOINT ["java", "-jar", "/app.jar"]
    
    AI写代码dockerfile
    1234
  3. 运行容器

    arduino 复制代码
    docker build -t flowable-demo .
    docker run -d -p 8080:8080 --name flowable-app flowable-demo
相关推荐
JustHappy3 分钟前
古法编程秘籍(七):互联网到底是什么?把两台电脑怎么说话搞懂就够了
前端·后端·网络协议
Hommy8824 分钟前
【剪映小助手】添加图片接口(Add Images)
后端·github·剪映小助手·视频剪辑自动化
GetcharZp1 小时前
别再盲目用 OpenCV 读图了,这才是 CV 预处理的终极杀手锏!
后端
IT_陈寒5 小时前
Vite热更新失效?可能你在用Windows
前端·人工智能·后端
椰椰椰耶6 小时前
[SpringCloud][14]OpenFeign参数传递方法
后端·spring·spring cloud
onething3656 小时前
Spring Boot + Spring AI 从入门到实战:7天转型计划 Day 3 —— 消息表设计 + 级联删除 + 事务管理
人工智能·后端
荣江6 小时前
Hermes Agent 代码仓库打包工具使用指南(repomix-rs 高性能版)
后端
王某某人6 小时前
LangChain4j 入门:Java 程序员的第一个 AI 对话程序
人工智能·后端
码农刚子6 小时前
从零开始:在 Windows 服务器上部署 Node.js 项目(小白实战教程)
后端·node.js
Cache技术分享6 小时前
435. Java 日期时间 API - Clock 灵活获取当前时间
前端·后端