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 提供了更多高级功能,如事件处理、任务管理,您可以根据项目需求进一步深入探索。希望这篇文章能够为您在工作流系统的开发中提供帮助!