在 Spring Boot 项目中集成 Activiti

在 Spring Boot 项目中集成 Activiti 来实现工作流管理是一个常见的需求,Activiti 是一个强大的工作流引擎,支持 BPMN 2.0 标准,适用于复杂的工作流管理、自动化任务、审批流程等。

下面是如何在 Spring Boot 项目中使用 Activiti 的详细步骤:

1. 引入依赖

在你的 pom.xml 中添加 Activiti 的相关依赖。Activiti 提供了多个模块,你可以选择合适的模块:

<dependencies>
    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Activiti Spring Boot Starter -->
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-spring-boot-starter</artifactId>
        <version>7.1.0.M6</version> <!-- 使用合适的版本 -->
    </dependency>

    <!-- Activiti Spring Boot Data JPA Starter (用于持久化数据库) -->
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-spring-boot-starter-data-jpa</artifactId>
        <version>7.1.0.M6</version> <!-- 使用合适的版本 -->
    </dependency>

    <!-- Database Dependencies for JPA (如 H2, MySQL, PostgreSQL 等) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>

    <!-- H2 Database (可选,用于开发测试) -->
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>

2. 配置数据库连接

配置你的数据库连接(例如 H2、MySQL 或 PostgreSQL)。在 application.propertiesapplication.yml 中配置数据源。

# 数据库配置
spring.datasource.url=jdbc:h2:mem:activiti;DB_CLOSE_DELAY=-1
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password

# JPA 配置
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=create-drop

# Activiti 配置
activiti.database-schema-update=true

如果使用 MySQL,修改为 MySQL 的相关配置,并确保数据库连接是有效的。

3. 配置 Spring Boot 启动类

在你的 @SpringBootApplication 启动类中,启用 Activiti 的配置。

import org.activiti.spring.boot.ProcessEngineAutoConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Import;

@SpringBootApplication
@Import(ProcessEngineAutoConfiguration.class)
public class WorkflowApplication {

    public static void main(String[] args) {
        SpringApplication.run(WorkflowApplication.class, args);
    }
}

4. 创建 BPMN 流程定义文件

Activiti 使用 BPMN 2.0 规范来定义流程。你可以在资源文件夹(src/main/resources)下创建一个 processes 文件夹,并在其中定义 BPMN 文件。

<?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"
             xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
             id="Process_1" targetNamespace="http://activiti.org/bpmn">
    <process id="myProcess" name="My Process" isExecutable="true">
        <startEvent id="startEvent" name="Start"></startEvent>
        <sequenceFlow id="flow1" sourceRef="startEvent" targetRef="endEvent"></sequenceFlow>
        <endEvent id="endEvent" name="End"></endEvent>
    </process>
</definitions>

将该 BPMN 文件命名为 my_process.bpmn20.xml 并存放到 src/main/resources/processes/ 目录下。

5. 启动流程引擎

在 Spring Boot 启动时,Activiti 会自动加载并创建数据库表格(如流程定义、历史记录、任务等)。通过创建工作流实例来启动流程。

6. 创建服务类管理工作流

你需要一个服务类来管理工作流的启动、任务分配等操作。

import org.activiti.bpmn.model.Process;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.task.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class WorkflowService {

    @Autowired
    private RuntimeService runtimeService;

    @Autowired
    private TaskService taskService;

    // 启动流程实例
    public void startProcess() {
        runtimeService.startProcessInstanceByKey("myProcess");
    }

    // 获取任务列表
    public List<Task> getTasks() {
        return taskService.createTaskQuery().list();
    }

    // 完成任务
    public void completeTask(String taskId) {
        taskService.complete(taskId);
    }
}

7. 创建控制器

创建一个控制器,用来触发流程操作,比如启动流程、查询任务、完成任务等。

import org.activiti.engine.task.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/workflow")
public class WorkflowController {

    @Autowired
    private WorkflowService workflowService;

    // 启动流程
    @PostMapping("/start")
    public String startProcess() {
        workflowService.startProcess();
        return "Process started successfully";
    }

    // 获取任务列表
    @GetMapping("/tasks")
    public List<Task> getTasks() {
        return workflowService.getTasks();
    }

    // 完成任务
    @PostMapping("/complete/{taskId}")
    public String completeTask(@PathVariable String taskId) {
        workflowService.completeTask(taskId);
        return "Task completed successfully";
    }
}

8. 测试流程

启动 Spring Boot 项目后,你可以通过以下接口测试流程操作:

  • 启动流程POST /workflow/start
  • 查看任务GET /workflow/tasks
  • 完成任务POST /workflow/complete/{taskId}

9. 可视化工作流(可选)

如果你希望能够在 UI 上查看工作流状态,可以使用 Activiti AdminFlowable 提供的 Web UI 工具,或者自定义开发一个 Web 页面,利用 Activiti 提供的 API 查询和展示流程实例、任务等信息。

10. 进阶:流程变量与任务分配

你可以在启动流程时传递流程变量,也可以在任务完成时更新变量。在 runtimeService.startProcessInstanceByKey 中传递变量:

runtimeService.startProcessInstanceByKey("myProcess", 
    Collections.singletonMap("someVariable", "someValue"));

此外,可以使用 Activiti 的任务分配功能,向用户分配任务。可以通过 taskService.claim(taskId, userId) 将任务分配给某个用户。


总结

通过以上步骤,你可以在 Spring Boot 项目中集成 Activiti,并实现基本的工作流管理,包括启动流程、查询任务、完成任务等功能。你可以进一步扩展它的功能,例如增加任务分配、流程监控、历史数据查询等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值