Spring Boot 2 集成 Activiti 6 的指南
在现代软件开发中,工作流引擎在项目管理、审批流程等方面扮演着越来越重要的角色。本文将介绍如何在 Spring Boot 2 项目中集成 Activiti 6,具体包括环境搭建、配置及示例代码。我们将为整个流程提供清晰的示意图,包括甘特图和类图,使得读者能够更好地理解整个系统。
什么是 Activiti?
Activiti 是一个轻量级的工作流和业务流程管理 (BPM) 平台。它以 Java 作为基础,支持 BPMN 2.0,适用于各种 Java 应用,尤其是 Spring 框架。
环境搭建
首先,确保安装了 Java 8+ 和 Maven。然后,我们创建一个新的 Spring Boot 项目。可以使用 Spring Initializr 工具生成一个基础项目:
- 项目名称:activiti-example
- 依赖项:Spring Web, Spring Data JPA, H2 Database
接下来,在 pom.xml
中添加 Activiti 依赖。
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-process</artifactId>
<version>6.0.0.M6</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-identity</artifactId>
<version>6.0.0.M6</version>
</dependency>
配置文件
在 application.yml
中配置 H2 数据库和 Activiti:
spring:
datasource:
url: jdbc:h2:mem:activiti;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
driver-class-name: org.h2.Driver
username: sa
password:
h2:
console:
enabled: true
activiti:
async-executor:
enabled: true
database:
schema: activiti
创建 BPMN 流程
在 src/main/resources/processes
目录下创建一个新的 BPMN 文件 sample-process.bpmn
:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="
xmlns:xsi="
xmlns:activiti="
targetNamespace="
<process id="sampleProcess" name="Sample Process" isExecutable="true">
<startEvent id="startEvent" />
<sequenceFlow id="flow1" sourceRef="startEvent" targetRef="task1" />
<userTask id="task1" name="User Task" activiti:assignee="user" />
<sequenceFlow id="flow2" sourceRef="task1" targetRef="endEvent" />
<endEvent id="endEvent" />
</process>
</definitions>
服务层代码
在项目中创建一个服务类 WorkflowService
,用于启动流程和查询流程状态。
import org.activiti.engine.RuntimeService;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class WorkflowService {
@Autowired
private RuntimeService runtimeService;
public ProcessInstance startProcess() {
return runtimeService.startProcessInstanceByKey("sampleProcess");
}
public ProcessDefinition getProcessDefinition(String processDefinitionId) {
return runtimeService.createProcessDefinitionQuery()
.processDefinitionId(processDefinitionId)
.singleResult();
}
}
控制器代码
创建一个控制器 WorkflowController
,用于将请求路由到服务。
import org.activiti.engine.runtime.ProcessInstance;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class WorkflowController {
@Autowired
private WorkflowService workflowService;
@GetMapping("/start")
public String startProcess() {
ProcessInstance processInstance = workflowService.startProcess();
return "Process started with ID: " + processInstance.getId();
}
}
甘特图
在实际工作流管理中,甘特图是一种常用的可视化工具,您可以使用 Mermaid 语法来创建。以下是针对我们流程的甘特图示例:
gantt
title Sample Gantt Chart
dateFormat YYYY-MM-DD
section User Task
Complete :done, des1, 2023-01-01, 2023-01-10
In Progress:active, des2, 2023-01-11, 10d
类图
为了更好地理解系统结构,我们可以使用类图来表示各个类之间的关系:
classDiagram
class WorkflowService {
+startProcess()
+getProcessDefinition()
}
class WorkflowController {
+startProcess()
}
WorkflowController -- WorkflowService : uses
总结
在本指南中,我们介绍了如何在 Spring Boot 2 中集成 Activiti 6。从项目的搭建到工作流的创建,以及如何建立服务和控制器。通过甘特图和类图,我们对整个系统的结构有了更深入的理解。Activiti 的灵活性和 Spring Boot 的便捷性相结合,可以帮助开发者在构建业务流程管理应用时更加高效。
这只是一个简单的开始,Activiti 提供了更多高级功能,如事件处理、任务管理,您可以根据项目需求进一步深入探索。希望这篇文章能够为您在工作流系统的开发中提供帮助!