一、环境准备
-
技术栈
- 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