Springboot 开发-- 集成 Activiti 7 流程引擎

发布于:2024-06-05 ⋅ 阅读:(134) ⋅ 点赞:(0)

引言

Activiti 7是一款遵循BPMN 2.0标准的开源工作流引擎,旨在为企业提供灵活、可扩展的流程管理功能。它支持图形化的流程设计、丰富的API接口、强大的执行引擎和完善的监控报表,帮助企业实现业务流程的自动化、规范化和智能化。本文将为您详细介绍 Activiti 7的安装及使用。

一、安装运行环境:

  • Activiti7:7.1.0.M2
  • SpringBoot:2.7.17
  • JDK的版本是:1.8

二、添加pom 依赖

pom 依赖如下:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <!-- activiti 依赖-->
    <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-spring-boot-starter</artifactId>
        <version>7.1.0.M2</version>
    </dependency>

    <!-- mysql -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.23</version>
    </dependency>
    <!-- jdbc -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
</dependencies>

三、配置文件 application.yml

server:
  port: 8081
spring:
  application:
    name: activitidemo
  # 配置Spring的数据源
  datasource:
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/activitidemo?useSSL=false&characterEncoding=utf-8&serverTimezone=UTC
    username: root
    password: xxxxx
    # activiti的配置
  activiti:
    #1.flase:默认值。activiti在启动时,对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常
    #2.true: activiti会对数据库中所有表进行更新操作。如果表不存在,则自动创建
    #3.create_drop: 在activiti启动时创建表,在关闭时删除表(必须手动关闭引擎,才能删除表)
    #4.drop-create: 在activiti启动时删除原来的旧表,然后在创建新表(不需要手动关闭引擎)
    database-schema-update: true
    # 检测历史表是否存在, Activiti7中默认是没有开启数据库历史记录的,启动数据库历史记录
    db-history-used: true
    #记录历史等级 可配置的历史级别有none, activity, audit, full
    #none:不保存任何的历史数据,因此,在流程执行过程中,这是最高效的。
    #activity:级别高于none,保存流程实例与流程行为,其他数据不保存。
    #audit:除activity级别会保存的数据外,还会保存全部的流程任务及其属性。audit为history的默认值。
    #full:保存历史数据的最高级别,除了会保存audit级别的数据外,还会保存其他全部流程相关的细节数据,包括一些流程参数等。
    history-level: full
    # 校验流程文件,默认校验resouces下的 process 文件夹里的流程文件
    check-process-definitions: false
    # 关闭自动部署
    deployment-mode: never-fail
    # 解决频繁查询SQL问题
    async-executor-activate: false

四、运行启动类

项目启动,将自动生成activiti 表结构
//为方便测试,禁用 默认的 Spring Security 认证

@SpringBootApplication(exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class})
public class ActivitidemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(ActivitidemoApplication.class, args);
    }
}

五、创建流程

  1. idea 安装 BPMN 可视化插件

在这里插入图片描述

  1. 创建BPMN文件 leave
    resource 目录下新建 文件夹 processes,右键-》新建-》 New Activiti 6.0x BPMN 2.0 file -》名称 leave

在这里插入图片描述

  1. 编写具体流程
    在创建好的文件中任意位置右键,选择 View BPMN Diagram,打开可视化界面(流程定义的界面)

在这里插入图片描述

  1. 打开可视化编辑器,右键start events –>start event画一个开始事件。

在这里插入图片描述

  1. 生成.png图片文件,在流程图中点击右键生成,并选择 BPMN所在文件目录保存

在这里插入图片描述
在这里插入图片描述

六、新建测试类进行流程测试

@SpringBootTest(classes = ActivitidemoApplication.class)
public class ActivitidemoApplicationTest {
    @Autowired
    private ProcessEngine processEngine;
    @Autowired
    private RepositoryService repositoryService;

    @Test
    public void test1(){
        TaskService taskService = processEngine.getTaskService();
        List<Task> list = taskService.createTaskQuery().list();
        for (Task task : list) {
            System.out.println(task);
        }
    }

    /**
     * 手动部署流程
     */
    @Test
    public void deployment(){
        DeploymentBuilder deployment = repositoryService.createDeployment();
        Deployment 请假流程 = deployment.name("请假流程")
                .addClasspathResource("processes/leave.bpmn20.xml")
                .addClasspathResource("processes/leave.png")
                .deploy();
        System.out.println("部署ID:"+请假流程.getId());
        System.out.println("部署名称:"+请假流程.getName());
    }

    /**
     * 查询流程部署列表
     */
    @Test
    public void listDeployments() {
        List<Deployment> deployments = this.repositoryService.createDeploymentQuery().list();
        if (!deployments.isEmpty()) {
            deployments.forEach(deployment -> {
                System.out.println("Id:" + deployment.getId());
                System.out.println("Name:" + deployment.getName());
                System.out.println("DeploymentTime:" + deployment.getDeploymentTime());
                System.out.println("Key:" + deployment.getKey());
            });
        }
    }
    /**
     * 删除流程部署
     */
    @Test
    public void deleteDeplyoment(){
        //第二个参数为级联删除,默认为false(有该流程的实例则不能删除),设置true则为级联删除
        repositoryService.deleteDeployment("8441e980-a5bc-11ed-a133-00e04c362f39",false);
    }
}

相关博客:

参考文档:
https://www.cnblogs.com/ccx-lly/p/17094482.html
Activiti工作流介绍及使用 https://blog.csdn.net/anyisure/article/details/131289554


网站公告

今日签到

点亮在社区的每一天
去签到