温馨提示×

Activity工作流在Java中如何实现

小樊
96
2024-09-30 07:37:31
栏目: 编程语言

在Java中,可以使用开源框架如Activiti或Camunda来实现Activity工作流。这里以Activiti为例,介绍如何使用它来实现一个简单的工作流。

  1. 添加Activiti依赖

在你的项目中添加Activiti的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>org.activiti</groupId>
    <artifactId>activiti-spring-boot-starter-basic</artifactId>
    <version>7.1.0.M4</version>
</dependency>
  1. 创建工作流模型

创建一个BPMN 2.0 XML文件来定义工作流。例如,创建一个名为my-workflow.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"
             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>

这个工作流包含一个开始事件、两个用户任务和一个结束事件。

  1. 创建Java类作为工作流引擎

创建一个Java类,用于启动和执行工作流。例如,创建一个名为MyWorkflowExecutor.java的文件,内容如下:

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 {
        // 启动工作流
        runtimeService.startProcessInstanceByKey("myWorkflow");

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

        // 完成任务
        taskService.complete(taskId);

        // 获取任务列表
        taskId = taskService.createTaskQuery().singleResult().getId();
        System.out.println("Task ID: " + taskId);

        // 完成任务
        taskService.complete(taskId);

        // 获取任务列表
        taskId = taskService.createTaskQuery().singleResult().getId();
        System.out.println("Task ID: " + taskId);

        // 完成任务
        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在启动时自动创建或更新数据库表结构。

  1. 运行应用程序

现在你可以运行你的Spring Boot应用程序。当你执行MyWorkflowExecutor类时,它将启动一个工作流并完成任务。你可以在Activiti管理界面查看工作流的执行情况。

这只是一个简单的示例,Activiti还提供了许多其他功能,如流程定义的部署、任务管理、事件监听器等。你可以查阅Activiti官方文档以了解更多详细信息。

0