在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官方文檔以了解更多詳細信息。