一、环境准备
- 
技术栈
- JDK 11+
 - Spring Boot 2.7.x
 - Flowable 6.8.0
 - MySQL 8.0
 
 - 
依赖配置
在
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
        三、流程定义与部署
- 
设计 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 - 
部署流程
将 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 
四、流程实例操作
- 
启动流程实例
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 - 
查询与完成任务
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 
五、动态任务分配
- 
静态分配
在 BPMN 中直接指定执行人:
ini<userTask id="managerApproval" name="经理审批" flowable:assignee="manager1" /> AI写代码xml 1 - 
动态分配
通过表达式或 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
        七、扩展功能
- 
会签任务
使用
flowable:candidateUsers或flowable: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 - 
邮件通知
集成 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 部署
- 
打包应用
gomvn clean package AI写代码bash 1 - 
构建 Docker 镜像
bashFROM openjdk:11-jre COPY target/flowable-demo.jar /app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/app.jar"] AI写代码dockerfile 1234 - 
运行容器
arduinodocker build -t flowable-demo . docker run -d -p 8080:8080 --name flowable-app flowable-demo