Spring Boot整合Activiti实现工作流详解(二)

0 下载量 29 浏览量 更新于2024-09-01 收藏 91KB PDF 举报
"本文是Spring Boot中使用Activiti的工作流教程的第二部分,主要介绍如何结合代码实际操作Activiti。上一节已经讲解了Activiti的基本概念、术语和API,本节将通过一个简单的请假流程实例,深入探讨Activiti的使用方法。流程包括员工发起请假申请,经理审批,以及根据审批结果发送邮件等步骤。流程定义文件使用BPMN2.0语言编写,详细列出了startEvent和userTask的配置。" 在Spring Boot中集成Activiti,可以有效地实现业务流程的自动化管理。Activiti是一个开源的工作流引擎,它提供了强大的流程建模、执行和监控能力。在Spring Boot项目中,我们可以利用Spring的自动配置特性轻松地将Activiti集成进应用程序。 首先,我们需要在项目中引入Activiti的依赖。在pom.xml文件中添加如下Maven依赖: ```xml <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter</artifactId> <version>版本号</version> </dependency> ``` 然后,配置Activiti的Spring Boot Starter,通常在application.properties或application.yml文件中设置数据库连接信息: ``` activiti.db-schema-auto-create=true spring.datasource.url=jdbc:mysql://localhost:3306/activiti?useSSL=false spring.datasource.username=root spring.datasource.password=root ``` 接下来,创建请假流程的BPMN2.0文件,如`VacationRequest.bpmn20.xml`,定义流程的各个元素,如startEvent、userTask、serviceTask等,并设置相应的属性,如id、name、activiti:initiator等。这个例子中,startEvent配置了两个formProperty,分别用于输入休假天数和开始日期,确保这些字段在申请时是必填的。 在代码中,我们需要创建Activiti的流程定义,并启动流程实例。这通常在一个Controller或者Service类中完成,通过`RuntimeService`和`ProcessEngine`对象来操作流程实例。例如: ```java @Autowired private RuntimeService runtimeService; @Autowired private ProcessEngine processEngine; public void startVacationRequest(String employeeName, Long numberOfDays, Date startDate, String reason) { // 创建流程变量 Map<String, Object> variables = new HashMap<>(); variables.put("employeeName", employeeName); variables.put("numberOfDays", numberOfDays); variables.put("startDate", startDate); variables.put("reason", reason); // 启动流程实例 ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("VacationRequest", variables); } ``` 流程启动后,可以通过TaskService查询当前用户的待办任务,并处理它们。例如,经理收到请假申请后,可以进行审批操作: ```java @Autowired private TaskService taskService; public void handleVacationRequest(String taskId, boolean isApproved) { Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); if (isApproved) { // 批准请假申请,发送邮件通知 // ... taskService.complete(taskId); } else { // 拒绝请假申请,返回给申请人 // ... } } ``` 在流程中,serviceTask用于执行后台服务,比如发送邮件。通过表达式或类名指定serviceTask的执行行为,例如: ```xml <serviceTask id="sendApprovalEmail" activiti:expression="${emailService.sendApprovalEmail(employeeName)}" /> ``` 至此,我们已经掌握了在Spring Boot中使用Activiti的基本步骤,包括配置、定义流程、启动实例以及处理任务。通过这种方式,可以轻松地构建复杂的企业级工作流系统,实现业务流程的自动化和规范化管理。在实际开发中,还可以利用Activiti提供的监控工具,对流程实例进行跟踪和分析,以优化和调整业务流程。