在Java中,可以使用开源框架如Activiti或Camunda来实现Activity工作流。这里以Activiti为例,介绍如何使用它来实现一个简单的工作流。
- 添加Activiti依赖
在你的项目中添加Activiti的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖:
org.activiti activiti-spring-boot-starter-basic 7.1.0.M4
- 创建工作流模型
创建一个BPMN 2.0 XML文件来定义工作流。例如,创建一个名为my-workflow.bpmn20.xml
的文件,内容如下:
这个工作流包含一个开始事件、两个用户任务和一个结束事件。
- 创建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); } }
- 配置Activiti
在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官方文档以了解更多详细信息。