Activity工作流在Java中如何實(shí)現(xiàn)

小樊
81
2024-09-30 07:37:31
欄目: 編程語言

在Java中,可以使用開源框架如Activiti或Camunda來實(shí)現(xiàn)Activity工作流。這里以Activiti為例,介紹如何使用它來實(shí)現(xiàn)一個(gè)簡單的工作流。

  1. 添加Activiti依賴

在你的項(xiàng)目中添加Activiti的依賴。如果你使用的是Maven,可以在pom.xml文件中添加以下依賴:

<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-spring-boot-starter-basic</artifactId>
    <version>7.1.0.M4</version>
</dependency>
  1. 創(chuàng)建工作流模型

創(chuàng)建一個(gè)BPMN 2.0 XML文件來定義工作流。例如,創(chuàng)建一個(gè)名為my-workflow.bpmn20.xml的文件,內(nèi)容如下:

<?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">

    <process id="myWorkflow" name="My Workflow" isExecutable="true">
        <startEvent id="startEvent"/>
        <sequenceFlow id="flow1" sourceRef="startEvent" targetRef="task1"/>
        <userTask id="task1" name="Task 1"/>
        <sequenceFlow id="flow2" sourceRef="task1" targetRef="task2"/>
        <userTask id="task2" name="Task 2"/>
        <sequenceFlow id="flow3" sourceRef="task2" targetRef="endEvent"/>
        <endEvent id="endEvent"/>
    </process>

</definitions>

這個(gè)工作流包含一個(gè)開始事件、兩個(gè)用戶任務(wù)和一個(gè)結(jié)束事件。

  1. 創(chuàng)建Java類作為工作流引擎

創(chuàng)建一個(gè)Java類,用于啟動(dòng)和執(zhí)行工作流。例如,創(chuàng)建一個(gè)名為MyWorkflowExecutor.java的文件,內(nèi)容如下:

import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

@Component
public class MyWorkflowExecutor implements CommandLineRunner {

    @Autowired
    private RepositoryService repositoryService;

    @Autowired
    private RuntimeService runtimeService;

    @Autowired
    private TaskService taskService;

    @Override
    public void run(String... args) throws Exception {
        // 啟動(dòng)工作流
        runtimeService.startProcessInstanceByKey("myWorkflow");

        // 獲取任務(wù)列表
        String taskId = taskService.createTaskQuery().singleResult().getId();
        System.out.println("Task ID: " + taskId);

        // 完成任務(wù)
        taskService.complete(taskId);

        // 獲取任務(wù)列表
        taskId = taskService.createTaskQuery().singleResult().getId();
        System.out.println("Task ID: " + taskId);

        // 完成任務(wù)
        taskService.complete(taskId);

        // 獲取任務(wù)列表
        taskId = taskService.createTaskQuery().singleResult().getId();
        System.out.println("Task ID: " + taskId);

        // 完成任務(wù)
        taskService.complete(taskId);
    }
}
  1. 配置Activiti

application.propertiesapplication.yml文件中添加以下配置:

# application.properties
spring.activiti.database-schema-update=true

或者

# application.yml
spring:
  activiti:
    database-schema-update: true

這將確保Activiti在啟動(dòng)時(shí)自動(dòng)創(chuàng)建或更新數(shù)據(jù)庫表結(jié)構(gòu)。

  1. 運(yùn)行應(yīng)用程序

現(xiàn)在你可以運(yùn)行你的Spring Boot應(yīng)用程序。當(dāng)你執(zhí)行MyWorkflowExecutor類時(shí),它將啟動(dòng)一個(gè)工作流并完成任務(wù)。你可以在Activiti管理界面查看工作流的執(zhí)行情況。

這只是一個(gè)簡單的示例,Activiti還提供了許多其他功能,如流程定義的部署、任務(wù)管理、事件監(jiān)聽器等。你可以查閱Activiti官方文檔以了解更多詳細(xì)信息。

0