在Java中,可以使用开源框架如Activiti或Camunda来实现Activity工作流。这里以Activiti为例,介绍如何使用它来实现一个简单的工作流。
在你的项目中添加Activiti的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖:
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>7.1.0.M4</version>
</dependency>
创建一个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>
这个工作流包含一个开始事件、两个用户任务和一个结束事件。
创建一个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);
}
}
在application.properties
或application.yml
文件中添加以下配置:
# application.properties
spring.activiti.database-schema-update=true
或者
# application.yml
spring:
activiti:
database-schema-update: true
这将确保Activiti在启动时自动创建或更新数据库表结构。
现在你可以运行你的Spring Boot应用程序。当你执行MyWorkflowExecutor
类时,它将启动一个工作流并完成任务。你可以在Activiti管理界面查看工作流的执行情况。
这只是一个简单的示例,Activiti还提供了许多其他功能,如流程定义的部署、任务管理、事件监听器等。你可以查阅Activiti官方文档以了解更多详细信息。