Flowable 是一个强大的 BPMN(业务流程模型与标记)引擎,能够帮助开发者管理和执行业务流程。结合 Spring Boot,Flowable 提供了一个易于上手的解决方案,可以快速构建和部署流程应用。下面我们将详细探讨 Flowable 和 Spring Boot 的集成,并给出相应的代码示例。
1. 环境准备
首先,我们需要在 Spring Boot 项目中添加 Flowable 的依赖。在 pom.xml
文件中添加以下依赖:
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter-process</artifactId>
<version>6.6.0</version> <!-- 请根据需要选择版本 -->
</dependency>
<dependency>
<groupId>org.flowable</groupId>
<artifactId>flowable-spring-boot-starter-spring-security</artifactId>
<version>6.6.0</version>
</dependency>
2. 配置 Flowable
在 application.yml
文件中配置数据库信息和 Flowable 的相关设置:
spring:
datasource:
url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
driver-class-name: org.h2.Driver
username: sa
password:
flowable:
database-schema-update: true
这里我们使用 H2 数据库作为内存数据库,并设置 Flowable 自动更新数据库模式。
3. 创建 BPMN 流程
在目录 src/main/resources/processes/
中创建一个 BPMN 文件 example.bpmn20.xml
,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:flowable="http://flowable.org/bpmn"
targetNamespace="http://www.flowable.org/bpmn20"
id="example">
<process id="myProcess" name="My Process" isExecutable="true">
<startEvent id="startEvent" name="Start"></startEvent>
<sequenceFlow id="flow1" sourceRef="startEvent" targetRef="task1"></sequenceFlow>
<userTask id="task1" name="User Task" flowable:assignee="${assignee}"></userTask>
<sequenceFlow id="flow2" sourceRef="task1" targetRef="endEvent"></sequenceFlow>
<endEvent id="endEvent" name="End"></endEvent>
</process>
</definitions>
4. 启动流程
接下来,我们创建一个控制器,在其中启动流程实例。创建 ProcessController
类:
import org.flowable.engine.RuntimeService;
import org.flowable.engine.runtime.ProcessInstance;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ProcessController {
@Autowired
private RuntimeService runtimeService;
@GetMapping("/start-process")
public String startProcess(@RequestParam String assignee) {
// 启动流程实例
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("myProcess",
Map.of("assignee", assignee));
return "Process started with ID: " + processInstance.getId();
}
}
5. 完成任务
为了完成用户任务,我们需要创建一个新的控制器方法:
import org.flowable.engine.TaskService;
import org.flowable.task.api.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TaskController {
@Autowired
private TaskService taskService;
@PostMapping("/complete-task")
public String completeTask(@RequestParam String taskId) {
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
if (task != null) {
taskService.complete(taskId);
return "Task " + taskId + " completed.";
} else {
return "Task not found.";
}
}
}
6. 启动应用
在主应用类中添加 @EnableProcessEngine
注解,以便启用 Flowable 的流程引擎:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.flowable.spring.annotation.EnableProcessEngine;
@SpringBootApplication
@EnableProcessEngine
public class FlowableDemoApplication {
public static void main(String[] args) {
SpringApplication.run(FlowableDemoApplication.class, args);
}
}
总结
通过上述步骤,我们已经成功将 Flowable 集成到 Spring Boot 项目中,并实现了一个简单的流程启动和任务完成的功能。开发者可以在这个基础上,进一步扩展流程的复杂性和业务逻辑,以满足不同的需求。Flowable 提供了灵活的配置和强大的功能,适合各种规模的企业应用。希望这篇文章能够帮助您理解如何在 Spring Boot 中使用 Flowable。