Spring Boot 是一个用于构建基于 Spring 框架的应用程序的开源框架,它可以快速简单地创建可部署的应用程序。Activiti 是一个流程引擎框架,它提供了一个建模器,可以用于创建和管理流程定义,以及一个运行时引擎,可以执行流程实例。在这里,我们将介绍如何将 Activiti 集成到 Spring Boot 中,以创建一个流程中心。

  1. 创建 Spring Boot 项目

首先,我们需要创建一个 Spring Boot 项目。可以使用 Spring Initializr 快速创建一个项目,也可以手动创建。在这里,我们使用 Spring Initializr 创建一个项目。

  1. 添加依赖

在 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-spring-boot-starter-basic</artifactId>
    <version>6.0.0</version>
</dependency>

这个依赖包含了 Activiti 引擎的基本组件,并且已经集成到了 Spring Boot 中。

  1. 创建流程定义文件

在 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>

这个文件定义了一个请假流程,包括申请和审批两个任务。

  1. 创建流程服务

在 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:完成指定任务,并设置变量。
  1. 创建控制器

在 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:完成指定任务,并设置变量。
  1. 启动应用程序

现在,我们可以启动应用程序,并访问 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,创建一个流程中心的简单步骤。当然,实际应用中可能还需要更多的配置和自定义,但是这个例子可以作为一个入门指南。

Spring Boot 集成 Activiti 构建流程中心

原文地址: https://www.cveoy.top/t/topic/nDAg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录