Spring Boot 集成 Activiti 构建流程中心
Spring Boot 是一个用于构建基于 Spring 框架的应用程序的开源框架,它可以快速简单地创建可部署的应用程序。Activiti 是一个流程引擎框架,它提供了一个建模器,可以用于创建和管理流程定义,以及一个运行时引擎,可以执行流程实例。在这里,我们将介绍如何将 Activiti 集成到 Spring Boot 中,以创建一个流程中心。
- 创建 Spring Boot 项目
首先,我们需要创建一个 Spring Boot 项目。可以使用 Spring Initializr 快速创建一个项目,也可以手动创建。在这里,我们使用 Spring Initializr 创建一个项目。
- 添加依赖
在 pom.xml 文件中添加以下依赖:
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>6.0.0</version>
</dependency>
这个依赖包含了 Activiti 引擎的基本组件,并且已经集成到了 Spring Boot 中。
- 创建流程定义文件
在 src/main/resources 目录下创建一个名为 process.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:activiti='http://activiti.org/bpmn'
targetNamespace='http://activiti.org/bpmn'>
<process id='leaveProcess' name='请假流程' isExecutable='true'>
<startEvent id='startEvent' name='开始'></startEvent>
<userTask id='applyTask' name='申请'>
<extensionElements>
<activiti:formProperty id='reason' name='请假原因' type='string' required='true'></activiti:formProperty>
<activiti:formProperty id='days' name='请假天数' type='integer' required='true'></activiti:formProperty>
</extensionElements>
<incoming>flow1</incoming>
<outgoing>flow2</outgoing>
</userTask>
<userTask id='approveTask' name='审批'>
<incoming>flow2</incoming>
<outgoing>flow3</outgoing>
</userTask>
<endEvent id='endEvent' name='结束'>
<incoming>flow3</incoming>
</endEvent>
<sequenceFlow id='flow1' sourceRef='startEvent' targetRef='applyTask'></sequenceFlow>
<sequenceFlow id='flow2' sourceRef='applyTask' targetRef='approveTask'></sequenceFlow>
<sequenceFlow id='flow3' sourceRef='approveTask' targetRef='endEvent'></sequenceFlow>
</process>
</definitions>
这个文件定义了一个请假流程,包括申请和审批两个任务。
- 创建流程服务
在 src/main/java 目录下创建一个名为 ProcessService 的类,用于提供流程服务。代码如下:
@Service
public class ProcessService {
@Autowired
private RuntimeService runtimeService;
@Autowired
private TaskService taskService;
public String startProcess(String processDefinitionKey, String userId, Map<String, Object> variables) {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey, variables);
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
task.setAssignee(userId);
taskService.saveTask(task);
return processInstance.getId();
}
public List<Task> getTasksByUserId(String userId) {
return taskService.createTaskQuery().taskAssignee(userId).list();
}
public void completeTask(String taskId, Map<String, Object> variables) {
taskService.complete(taskId, variables);
}
}
这个类包括了三个方法:
- startProcess:启动一个流程实例,并分配给指定的用户。
- getTasksByUserId:获取指定用户的待办任务列表。
- completeTask:完成指定任务,并设置变量。
- 创建控制器
在 src/main/java 目录下创建一个名为 ProcessController 的控制器类,用于处理 HTTP 请求。代码如下:
@RestController
@RequestMapping("/process")
public class ProcessController {
@Autowired
private ProcessService processService;
@GetMapping("/tasks")
public List<Task> getTasksByUserId(@RequestParam String userId) {
return processService.getTasksByUserId(userId);
}
@PostMapping("/start")
public String startProcess(@RequestParam String processDefinitionKey, @RequestParam String userId,
@RequestParam(required = false) String reason, @RequestParam(required = false) Integer days) {
Map<String, Object> variables = new HashMap<>();
variables.put("reason", reason);
variables.put("days", days);
return processService.startProcess(processDefinitionKey, userId, variables);
}
@PostMapping("/complete")
public void completeTask(@RequestParam String taskId, @RequestParam(required = false) String approve,
@RequestParam(required = false) String comment) {
Map<String, Object> variables = new HashMap<>();
variables.put("approve", approve);
variables.put("comment", comment);
processService.completeTask(taskId, variables);
}
}
这个控制器包含了三个方法:
- getTasksByUserId:获取指定用户的待办任务列表。
- startProcess:启动一个流程实例。
- completeTask:完成指定任务,并设置变量。
- 启动应用程序
现在,我们可以启动应用程序,并访问 http://localhost:8080/process/tasks?userId=admin 来获取管理员的待办任务列表。我们也可以访问 http://localhost:8080/process/start?processDefinitionKey=leaveProcess&userId=admin&reason=病假&days=3 来启动一个请假流程实例。最后,我们可以访问 http://localhost:8080/process/complete?taskId=1234&approve=true&comment=同意 来完成一个任务,并设置变量。
这就是如何在 Spring Boot 中集成 Activiti,创建一个流程中心的简单步骤。当然,实际应用中可能还需要更多的配置和自定义,但是这个例子可以作为一个入门指南。
原文地址: https://www.cveoy.top/t/topic/nDAg 著作权归作者所有。请勿转载和采集!