当前位置: 首页 > news >正文

Activiti 5 + Spring Boot全流程开发指南

目录

一、环境搭建(Spring Boot 2.x)

1.1 依赖配置

1.2 配置文件

二、流程定义与部署

2.1 创建BPMN文件(leave.bpmn)

2.2 流程部署服务

三、流程操作核心实现

3.1 启动流程实例

3.2 查询待办任务

四、审批流程处理

4.1 通过审批

4.2 驳回流程

4.3 撤回流程

五、流程状态管理

5.1 流程历史查询

5.2 流程图生成

六、完整流程示例

6.1 请假流程时序图

七、常见问题解决方案

7.1 流程版本控制

7.2 流程变量管理

结语


一、环境搭建(Spring Boot 2.x)

1.1 依赖配置

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-spring-boot-starter-basic</artifactId>
        <version>5.22.0</version>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>

1.2 配置文件

spring:
  activiti:
    database-schema-update: true
    history-level: full
    check-process-definitions: false
  datasource:
    url: jdbc:h2:mem:testdb
    driverClassName: org.h2.Driver
    username: sa
    password: 

二、流程定义与部署

2.1 创建BPMN文件(leave.bpmn)

<process id="leaveProcess" name="请假流程">
    <startEvent id="start"/>
    <userTask id="apply" name="提交申请" activiti:assignee="${applicant}"/>
    <userTask id="managerApprove" name="经理审批" activiti:assignee="${approver}"/>
    <exclusiveGateway id="exclusiveGw"/>
    <sequenceFlow sourceRef="start" targetRef="apply"/>
    <sequenceFlow sourceRef="apply" targetRef="managerApprove"/>
    <sequenceFlow sourceRef="managerApprove" targetRef="exclusiveGw"/>
    <endEvent id="end"/>
</process>

2.2 流程部署服务

@Service
public class ProcessService {
    @Autowired
    private RepositoryService repositoryService;

    public void deployProcess(String bpmnPath) {
        repositoryService.createDeployment()
            .addClasspathResource(bpmnPath)
            .deploy();
    }
}

三、流程操作核心实现

3.1 启动流程实例

@Service
public class RuntimeService {
    @Autowired
    private org.activiti.engine.RuntimeService activitiRuntimeService;

    public String startProcess(String processKey, String businessKey, 
                              Map<String, Object> variables) {
        return activitiRuntimeService.startProcessInstanceByKey(processKey, 
                businessKey, variables).getId();
    }
}

3.2 查询待办任务

@Service 
public class TaskService {
    @Autowired
    private org.activiti.engine.TaskService activitiTaskService;

    public List<Task> getTasksByUser(String userId) {
        return activitiTaskService.createTaskQuery()
            .taskAssignee(userId)
            .list();
    }
}

四、审批流程处理

4.1 通过审批

public void completeTask(String taskId, Map<String, Object> variables) {
    activitiTaskService.complete(taskId, variables);
}

4.2 驳回流程

public void rejectTask(String taskId, String targetTaskKey) {
    Task currentTask = activitiTaskService.createTaskQuery()
        .taskId(taskId).singleResult();
    
    activitiRuntimeService.createProcessInstanceModification(currentTask.getProcessInstanceId())
        .cancelActivityInstance(currentTask.getExecutionId())
        .startBeforeActivity(targetTaskKey)
        .execute();
}

4.3 撤回流程

public void withdrawProcess(String processInstanceId) {
    activitiRuntimeService.deleteProcessInstance(processInstanceId, "用户撤回");
}

五、流程状态管理

5.1 流程历史查询

public List<HistoricActivityInstance> getHistory(String processInstanceId) {
    return historyService.createHistoricActivityInstanceQuery()
        .processInstanceId(processInstanceId)
        .orderByHistoricActivityInstanceStartTime().asc()
        .list();
}

5.2 流程图生成

public InputStream generateDiagram(String processInstanceId) {
    ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
        .processInstanceId(processInstanceId).singleResult();
    
    BpmnModel bpmnModel = repositoryService.getBpmnModel(
        processInstance.getProcessDefinitionId());
    
    return processDiagramGenerator.generateDiagram(bpmnModel, "png", 
        runtimeService.getActiveActivityIds(processInstanceId));
}

六、完整流程示例

6.1 请假流程时序图



七、常见问题解决方案

7.1 流程版本控制

public List<ProcessDefinition> getProcessVersions(String processKey) {
    return repositoryService.createProcessDefinitionQuery()
        .processDefinitionKey(processKey)
        .orderByProcessDefinitionVersion().desc()
        .list();
}

7.2 流程变量管理

// 设置变量
taskService.setVariable(taskId, "approveComment", "同意申请");

// 获取变量
String comment = (String) taskService.getVariable(taskId, "approveComment");

结语

最佳实践建议:

  1. 使用@Transactional注解保证流程操作与业务数据

相关文章:

  • web安全——分析应用程序
  • java基本常识
  • 2025最新Flask学习笔记(对照Django做解析)
  • vue3-06vue2(Object.defineProperty)与vue3(基于ES6的Proxy)的响应式原理对比
  • 【注解】Java自定义注解
  • 跟着官方文档学习UE C++ TArray容器系列 迭代
  • Python 3 实用工具库
  • C++基础03(面向对象)
  • 36. 有效的数独
  • 【deepseek】本地部署+webui访问
  • 论文阅读笔记:Continual Forgetting for Pre-trained Vision Models
  • Imagination GPU 3D Graphics Wrokload
  • linux基础语法2
  • 开源文件存储系统
  • 提升数据洞察力:五款报表软件助力企业智能决策
  • 【Mysql】我在广州学Mysql 系列—— 性能优化相关例题
  • 设计模式之代理设计模式
  • nodejs用ws模块反向代理socks5数据,即用ws写服务端和客户端及加密
  • Spring Boot + Apache POI 实现 Excel 导出:BOM物料清单生成器(支持中文文件名、样式美化、数据合并)
  • 2.26 notes on cxl
  • 中文软件开发平台/小红书seo排名
  • 重庆高端网站seo/视频号排名优化帝搜软件
  • 模版网站做支付功能/ui培训
  • 图文可以做网站设计吗/常州谷歌优化
  • 竞价排名推广方案/网站seo服务公司
  • 微信微商城怎么做/搜索引擎优化的方法包括