Spring Boot Activiti工作流引擎简介

在现代应用程序开发中,工作流引擎作为一种重要的组件,广泛应用于业务流程自动化管理,其中Activiti是一个流行的Java工作流引擎。本文将介绍如何在Spring Boot中使用Activiti,并通过代码示例帮助大家更好地理解。

Activiti工作流引擎概述

Activiti是一个轻量级、高性能的工作流引擎,它支持BPMN 2.0标准,适用于业务流程建模、执行和监控。它提供了一套完整的API,方便开发者集成和使用。

项目结构

在我们的项目中,将使用Spring Boot和Activiti。项目结构如下:

|-- src
|   |-- main
|   |   |-- java
|   |   |   |-- com.example.workflow
|   |   |       |-- WorkflowApplication.java
|   |   |       |-- WorkflowService.java
|   |   |-- resources
|   |       |-- process.bpmn20.xml
|-- pom.xml

Maven依赖

首先,在pom.xml中添加Activiti的依赖:

<dependencies>
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-spring-boot-starter</artifactId>
        <version>7.1.0.M1</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

编写BPMN流程文件

resources目录下创建一个名为process.bpmn20.xml的文件,定义简单的工作流程:

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="
             xmlns:xsi=" 
             xsi:schemaLocation=" BPMN20.xsd">
    <process id="myProcess" isExecutable="true">
        <startEvent id="startEvent"/>
        <sequenceFlow id="flow1" sourceRef="startEvent" targetRef="userTask"/>
        <userTask id="userTask" name="User Task" activiti:assignee="${assignee}"/>
        <sequenceFlow id="flow2" sourceRef="userTask" targetRef="endEvent"/>
        <endEvent id="endEvent"/>
    </process>
</definitions>

服务类实现

接下来,我们在WorkflowService.java中编写业务逻辑:

import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.spring.SpringProcessEngineConfiguration;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class WorkflowService {

    @Autowired
    private SpringProcessEngineConfiguration processEngineConfiguration;

    public void startProcess(String assignee) {
        ProcessInstance processInstance = processEngineConfiguration.getRuntimeService()
            .startProcessInstanceByKey("myProcess", Map.of("assignee", assignee));
        System.out.println("Process started with ID: " + processInstance.getId());
    }
}

控制器实现

随后,创建一个简单的控制器来处理请求:

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 WorkflowController {

    @Autowired
    private WorkflowService workflowService;

    @PostMapping("/start")
    public String startProcess(@RequestParam String assignee) {
        workflowService.startProcess(assignee);
        return "Process started successfully!";
    }
}

关系图和旅行图

关系图

使用Mermaid语法可视化项目中的实体关系:

erDiagram
    PROCESS {
        string id
        string name
    }
    USER {
        string id
        string name
    }
    PROCESS ||--o| USER : initiates

旅行图

生成工作流程运行的旅行图:

journey
    title Activiti工作流的执行过程
    section 用户发起流程
      用户输入代办: 5: 用例
      系统启动工作流: 4: 系统
    section 用户处理任务
      用户完成用户任务: 5: 用例
      系统结束流程: 4: 系统

结论

通过本篇文章,我们学习了如何在Spring Boot中集成和使用Activiti工作流引擎。借助BPMN定义的流程文件,我们能够创建灵活的业务流程,提高应用程序的可维护性与可扩展性。希望对大家有所帮助!