Activiti 完整Hello World大比拼(Activiti工作流 API结合实例讲解)

风吹过的夏天 2024-03-04 ⋅ 33 阅读

引言

Activiti是一款开源的轻量级工作流引擎,被广泛应用于各种企业级应用和系统中。本文将通过一个完整的Hello World大比拼,带你深入了解Activiti的工作流API,并通过实例讲解其具体使用方法。

前言

在开始之前,首先需要下载并安装Activiti的最新版本。安装过程非常简单,只需解压缩下载的文件即可。此外,你还需要安装Java开发工具包(JDK)。

Activiti API初探

首先,我们需要在Java工程中引入Activiti的相关库。可以通过Maven依赖或者手动引入的方式实现。

<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-engine</artifactId>
    <version>7.1.0</version>
</dependency>

接下来,我们将通过一个简单的实例来演示Activiti的工作流API。

第一个工作流实例

我们假设有一个简单的请假流程,包括请假申请、审批通过和审批拒绝。以下是实现该流程的Java代码。

  1. 创建请假流程定义
public class HelloWorld {

    public static void main(String[] args) {
        ProcessEngineConfiguration cfg = ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration();
        ProcessEngine processEngine = cfg.buildProcessEngine();

        RepositoryService repositoryService = processEngine.getRepositoryService();
        Deployment deployment = repositoryService.createDeployment()
                .addClasspathResource("leave.bpmn")
                .deploy();

        System.out.println("流程定义ID: " + deployment.getId());

        RuntimeService runtimeService = processEngine.getRuntimeService();
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leaveProcess");

        System.out.println("流程实例ID: " + processInstance.getId());

        TaskService taskService = processEngine.getTaskService();
        List<Task> tasks = taskService.createTaskQuery().taskAssignee("employee").list();

        for (Task task : tasks) {
            System.out.println("待办任务: " + task.getName());
            taskService.complete(task.getId());
        }

        tasks = taskService.createTaskQuery().taskAssignee("manager").list();

        for (Task task : tasks) {
            System.out.println("待办任务: " + task.getName());
            taskService.complete(task.getId());
        }

        HistoricProcessInstance historicProcessInstance = processEngine.getHistoryService()
                .createHistoricProcessInstanceQuery()
                .processInstanceId(processInstance.getId())
                .singleResult();

        System.out.println("流程结束,耗时:" + historicProcessInstance.getDurationInMillis() + "毫秒");
    }
}
  1. 创建请假流程定义文件(leave.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"
             xmlns:activiti="http://activiti.org/bpmn"
             xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI"
             xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"
             xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd"
             targetNamespace="http://www.activiti.org/test">
    <process id="leaveProcess" name="请假流程" isExecutable="true">
        <startEvent id="start" name="开始"/>
        <userTask id="apply" name="请假申请" activiti:assignee="employee"/>
        <userTask id="approve" name="审批通过" activiti:assignee="manager"/>
        <userTask id="reject" name="审批拒绝" activiti:assignee="manager"/>
        <endEvent id="end" name="结束"/>

        <sequenceFlow id="flow1" sourceRef="start" targetRef="apply"/>
        <sequenceFlow id="flow2" sourceRef="apply" targetRef="approve"/>
        <sequenceFlow id="flow3" sourceRef="apply" targetRef="reject"/>
        <sequenceFlow id="flow4" sourceRef="approve" targetRef="end"/>
        <sequenceFlow id="flow5" sourceRef="reject" targetRef="end"/>
    </process>
</definitions>

以上代码实现了一个简单的请假流程,包括请假申请、审批通过和审批拒绝。接下来,我们将对代码进行解读。

首先,我们通过ProcessEngineConfiguration创建了一个基于内存的Process Engine实例。然后,我们使用RepositoryService创建并部署了一个流程定义,该流程定义基于我们在leave.bpmn文件中定义的流程模型。然后,我们通过RuntimeService启动了一个流程实例,并使用TaskService查询并完成了相应的任务。最后,我们通过HistoryService获取了流程实例的历史信息。

结语

通过本篇博客,我们学习了Activiti工作流API的基本用法,并通过一个完整的Hello World大比拼实例深入了解了其实际应用。希望本文能对你了解和应用Activiti提供帮助,祝你的工作流管理更加高效!

关键词:Activiti, 工作流, API, 实例讲解


全部评论: 0

    我有话说: