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

引言

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.Driverurl: jdbc:mysql://localhost:3306/activitidemo?useSSL=false&characterEncoding=utf-8&serverTimezone=UTCusername: rootpassword: 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 {@Autowiredprivate ProcessEngine processEngine;@Autowiredprivate RepositoryService repositoryService;@Testpublic void test1(){TaskService taskService = processEngine.getTaskService();List<Task> list = taskService.createTaskQuery().list();for (Task task : list) {System.out.println(task);}}/*** 手动部署流程*/@Testpublic 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());}/*** 查询流程部署列表*/@Testpublic 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());});}}/*** 删除流程部署*/@Testpublic void deleteDeplyoment(){//第二个参数为级联删除,默认为false(有该流程的实例则不能删除),设置true则为级联删除repositoryService.deleteDeployment("8441e980-a5bc-11ed-a133-00e04c362f39",false);}
}

相关博客:

  • 开源流程引擎三巨头:activiti、flowable、camunda 简介

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/22528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode:最长公共前缀

题目链接&#xff1a;14. 最长公共前缀 - 力扣&#xff08;LeetCode&#xff09; 普通版本&#xff08;横向扫描&#xff09; 主旨&#xff1a;用第一个字符串与后续的每个字符串进行比较&#xff0c;先获取S1和S2的最长公共前缀&#xff0c;然后将该次比较获得的最长公共前缀…

python中如何使用密码字典

使用itertools循环迭代的模块来实现生成密码字典&#xff0c;用这个模块可以省不少事。 首先要调用itertools。 import itertools as its 然后将字典需要的元素&#xff08;或者说是关键字&#xff09;赋给word变量。 我们这里假设密码是纯数字&#xff0c;所以元素就是12345…

创新指南|2024企业如何开启生成式AI创新?从5大应用场景和6步抓手

想要了解如何采用生成式AI来提高企业效率和竞争力&#xff1f;本指南将介绍如何采用生成式AI来实现数字化转型&#xff0c;并打造智能化商业模式。从5大应用场景和6大步骤切入&#xff0c;让您了解如何开启生成式AI创新。立即连线创新专家咨询或观看创新战略方案视频进一步了解…

test2042

语义边缘检测和语义分割的区别 语义边缘检测&语义分割 Semantic Edge Detection vs. Semantic Segmentation 区别difference 任务目标 Task Objective 语义边缘检测 Semantic Edge Detection 识别图像中不同物体之间的边界线或轮廓及语义类别 Identifying the boundaries …

2024如何优化SEO?

在2024年的今天&#xff0c;要问我会如何优化seo&#xff0c;我会专注于几个关键的方面。首先&#xff0c;随着AI内容生成技术的发展&#xff0c;我会利用这些工具来帮助创建或优化我的网站内容&#xff0c;但是&#xff0c;随着谷歌3月份的算法更新&#xff0c;纯粹的ai内容可…

无法访问内网怎么办?

许多用户在日常生活和工作中&#xff0c;经常需要进行远程连接和访问内网的需求。出于各种原因&#xff0c;有时我们会遇到无法访问内网的问题。本文将从可能的原因和解决方案的角度来探讨此问题。 原因分析 网络设置问题: 在一些情况下&#xff0c;我们无法访问内网可能是因为…

分层存储的图片的3d显示

分层存储的图片叠层成为3d&#xff0c;并显示。 文件夹D:\mask内的分层存储的图像文件mask_1.PNG至mask_12.PNG&#xff1a; 1、显示为3d点云&#xff1a; import open3d as o3d import numpy as np from PIL import Imagedef images2point_cloud(paths, layer_height):point…

(九)Spring教程——ApplicationContext中Bean的生命周期

1.前言 ApplicationContext中Bean的生命周期和BeanFactory中的生命周期类似&#xff0c;不同的是&#xff0c;如果Bean实现了org.springframework.context.ApplicationContextAware接口&#xff0c;则会增加一个调用该接口方法setApplicationContext()的步骤。 此外&#xff0c…

香橙派 Orange AIpro 测评记录视频硬件解码

香橙派 Orange AIpro 测评记录视频硬件解码 香橙派官网&#xff1a;http://www.orangepi.cn/ 收到了一块Orange Pi AIpro开发板&#xff0c;记录一下我的测评~测评简介如下&#xff1a;1.连接网络2.安装流媒体进行硬件解码测试3.安装IO测试 简介 Orange Pi AI Pro 是香橙派联合…

0基础学习区块链技术——链之间数据同步样例

我们可以在https://blockchaindemo.io/体验这个过程。 创建区块 默认第一个链叫Satoshi(中本聪)。链上第一个区块叫“创世区块”——Genesis Block。后面我们会看到创建的第二条链第一个区块也是如此。 新增链 新创建的链叫Debby。默认上面有一个创世区块。 然后我们让这…

C# 中文字符串转GBK字节的示例

一、编写思路 在 C# 中&#xff0c;将中文字符串转换为 GBK 编码的字节数组需要使用 Encoding 类。然而&#xff0c;Encoding 类虽然默认并不直接支持 GBK 编码&#xff0c;但是可以通过以下方式来实现这一转换&#xff1a; 1.使用系统已安装的编码提供者&#xff08;如果系统…

从实战案例来学习结构化提示词(一)

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识,包括但不限于AI科普,AI工具测评,AI效率提升,AI行业洞察。关注我,AI之…

Python语法详解module1(变量、数据类型)

目录 一、变量1. 变量的概念2. 创建变量3. 变量的修改4. 变量的命名 二、数据类型1. Python中的数据类型2. 整型&#xff08;int&#xff09;3. 浮点型&#xff08;float&#xff09;4. 布尔型&#xff08;bool&#xff09;5. 字符串&#xff08;str&#xff09;6.复数&#xf…

MySQL中所有常见知识点汇总

存储引擎 这一张是关于整个存储引擎的汇总知识了。 MySQL体系结构 这里是MySQL的体系结构图&#xff1a; 一般将MySQL分为server层和存储引擎两个部分。 其实MySQL体系结构主要分为下面这几个部分&#xff1a; 连接器&#xff1a;负责跟客户端建立连 接、获取权限、维持和管理…

[数据集][图像分类]蘑菇分类数据集14689张50类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;14689 分类类别数&#xff1a;50 类别名称:[“agaricus_augustus”,“agari…

流程引擎,灵活设计业务流程的编辑器设计

流程引擎&#xff0c;灵活设计业务流程的编辑器设计

PySpark特征工程(I)--数据预处理

有这么一句话在业界广泛流传&#xff1a;数据和特征决定了机器学习的上限&#xff0c;而模型和算法只是逼近这个上限而已。由此可见&#xff0c;特征工程在机器学习中占有相当重要的地位。在实际应用当中&#xff0c;可以说特征工程是机器学习成功的关键。 特征工程是数据分析…

若依项目部署(Linux2.0)

解压jdk tar -zxvf jdk-8u151-linux-x64.tar.gz 配置Java环境变量&#xff1a; vim /etc/profile 设置环境变量生效&#xff1a; source /etc/profile 查看一下jdk版本&#xff1a; java -version 解压tomcat tar -zxvf apache-tomcat-8.5.20.tar.gz 防火墙设置&#xff1a; …

一款WPF的小巧MVVM框架——stylet框架初体验

今天偶然知道有一款叫做stylet的MVVM框架&#xff0c;挺小巧的&#xff0c;特别是它的命令触发方式&#xff0c;简单粗暴&#xff0c;让人感觉很神器。所以接下来我要做一个简单的demo&#xff0c;顺便来分享给大家。 本地创建一个WPF项目&#xff0c;此处我使用.NET 8来创建。…

ABB喷涂机器人IRB52维修指导分析

ABB喷涂机器人是一种非常重要的涂装设备&#xff0c;但是它的维护保养工作也必不可少。如果不定期维修保养&#xff0c;可能会导致ABB喷涂机械手故障&#xff0c;影响生产效率和产品质量。 首先&#xff0c;定期检查ABB涂装机器人IRB52喷嘴和喷枪是否正常&#xff0c;这是维修…