万字解析Activiti7流程框架(一)

简介: 万字解析Activiti7流程框架

Activiti7流程框架基本功能学习


1.整合Activiti7与springboot:


Activiti官网地址


官网给出的pom依赖我们是无法导入的,就算是通过阿里云的镜像也是无法识别的.


2020121514031789.png


但是阿里云的Maven仓库里面是有的,只是名字不同而已,所以我们需要去重新导入这些依赖.并且M5的版本存在一个bug就是每次项目之后都会在 act_re_deployment表里面插入一条数据SpringAutoDeployment ,所以建议大家使用M4的版本


20201215140352598.png


接着我们进入阿里云的Maven仓库,去重新搜索一下这些文件的pom依赖:


activiti-spring-boot-starter的pom依赖:


20201215140427159.png


activiti-dependencies的pom依赖:


20201215140459925.png


之后我们重新引入pom依赖之后可以发现,已经能够正常导入了.


20201215140615558.png


之后我们运行项目可以发现已经自动帮我们创建了一部分的表:


20201215140657395.png


但是呢,这部分的表其实是不全的,我们还需要通过下面的配置创建我们关于历史信息的表:


20201215140710327.png


但是到这里我们还是不够,我们还需要通过下面的SQL脚本创建我们的用户表以及Formdata表:


SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- 创建用户表
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(32) DEFAULT NULL COMMENT '姓名',
  `address` varchar(64) DEFAULT NULL COMMENT '联系地址',
  `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '账号',
  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '密码',
  `roles` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '角色',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
-- ----------------------------
-- 填充用户表
-- ----------------------------
INSERT INTO `user` VALUES ('1', 'admincn', 'beijing', 'admin', '$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki', 'ROLE_ACTIVITI_ADMIN');
INSERT INTO `user` VALUES ('2', 'bajiecn', 'shanghang', 'bajie', '$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki', 'ROLE_ACTIVITI_USER,GROUP_activitiTeam,g_bajiewukong');
INSERT INTO `user` VALUES ('3', 'wukongcn', 'beijing', 'wukong', '$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki', 'ROLE_ACTIVITI_USER,GROUP_activitiTeam');
INSERT INTO `user` VALUES ('4', 'salaboycn', 'beijing', 'salaboy', '$2a$10$gw46pmsOVYO.smHYQ2jH.OoXoe.lGP8OStDkHNs/E74GqZDL5K7ki', 'ROLE_ACTIVITI_USER,GROUP_activitiTeam');
-- ----------------------------
-- 修复Activiti7的M4版本缺失字段Bug
-- ----------------------------
alter table ACT_RE_DEPLOYMENT add column PROJECT_RELEASE_VERSION_ varchar(255) DEFAULT NULL;
alter table ACT_RE_DEPLOYMENT add column VERSION_ varchar(255) DEFAULT NULL;
-- ----------------------------
-- 动态表单数据存储
-- ----------------------------
DROP TABLE IF EXISTS `formdata`;
CREATE TABLE `formdata` (
  `PROC_DEF_ID_` varchar(64) DEFAULT NULL,
  `PROC_INST_ID_` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `FORM_KEY_` varchar(255) DEFAULT NULL,
  `Control_ID_` varchar(100) DEFAULT NULL,
  `Control_VALUE_` varchar(2000) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


运行完我们的脚本文件之后我们就获得了我们所需要的所有的表:


20201215140732745.png


2.Deployment-部署操作:


Deployment主要三个表操作有关,分别是act_re_deployment,act_ge_bytearray和act_re_procdef这三个表,我们再来说说这三个表分别代表以及存储的都是些什么信息


act_re_deployment 该表主要是记录了我们已经部署了那些流程,主要记录部署流程的时间,版本号,名称等等


act_ge_bytearray 该表主要就是记录我们部署流程过程中我们已经上传过的流程文件的数据,并且以二进制的形式保存这些文件


act_re_procdef 该表主要就是记录我们已经部署过的流程的详细信息,主要包括流程的版本号,名称等等


尤其要区别act_re_deployment与act_re_procdef这两个表. act_re_deployment主要是记录 部署流程的过程 的信息,act_re_procdef则是记录 部署的该流程的信息


2.1-Deployment单个文件部署:


测试Activiti7关于bpmn流程文件的部署,编写一个测试类进行测试


@SpringBootTest
public class Part1_Deployment {
    @Autowired
    private RepositoryService repositoryService;
    @Test
    public void initDeploymentBPMN(){
        //bpmn文件所在的文件路径
        String filename="BPMN/Part1_Deployment.bpmn";
        //部署bpmn文件
        Deployment deployment=repositoryService.createDeployment()
                .addClasspathResource(filename)
                .name("流程部署测试BPMN")
                .deploy();
        System.out.println(deployment.getName());
    }
}

这样我们的测试代码就已经编写好了,我们执行完成之后我们去查看数据库的这两个表各多了一条数据


一个就是act_re_deployment,代表部署表,表示该文件已经部署在了数据库里面


20201215140755933.png


另一个就是act_ge_bytearray,代表文件表,这个表主要就是存储部署的bpmn文件的实际数据,这里我们是可以通过保存数据的方式查看该bpmn文件的xml数据


20201215140815155.png


image.gif


这是目前部署bpmn流程文件的方式,但是在此之前的版本中因为 可能不能够直接打开bpmn文件,所以一般部署的时候还会 带上一张bpmn文件的图片即流程图 ,这样就能够方便用户查看流程,所以我们再来看看之前版本部署流程文件时候,是怎么做的.


@SpringBootTest
public class Part1_Deployment {
    @Autowired
    private RepositoryService repositoryService;
    @Test
    public void initDeploymentBPMN(){
        String filename="BPMN/Part1_Deployment.bpmn";
        String imagename="BPMN/Part1_Deployment.png";
        Deployment deployment=repositoryService.createDeployment()
                .addClasspathResource(filename)
                .addClasspathResource(imagename)
                .name("流程部署测试BPMN")
                .deploy();
        System.out.println(deployment.getName());
    }
}


这时候我们运行完,重新去看看数据库的数据变成什么样了


先是act_re_deployment,我们可以看到又重新部署了一次


20201215140843540.png


再来看看act_ge_bytearray,可以看到多了两条数据,一个就是bpmn流程文件,一个就是我们刚刚定义的png图像文件


20201215140858160.png


这就是之前我们部署bpmn流程文件的方式,但是现在我们就只需要部署bpmn文件即可,之后可以直接通过 将bpmn文件转换成相应的HTML文件展示给用户看.


2.2-Deployment压缩文件部署:


这里我们将上面的文件重命名之后打包成压缩包的形式,看看以压缩文件的形式进行部署是怎么样的.


20201215140916740.png


    @Test
    public void initDeploymentZIP(){
        InputStream inputStream=this.getClass().getClassLoader().getResourceAsStream("BPMN/BPMN.zip");
        ZipInputStream zipInputStream=new ZipInputStream(inputStream);
        Deployment deployment=repositoryService.createDeployment()
                .addZipInputStream(zipInputStream)
                .name("流程部署测试ZIP")
                .deploy();
        System.out.println(deployment.getName());
    }

20201215140858160.png这里我们还是再去看看数据库里面手机怎么添加数据的


先是act_re_deployment,我们可以看到又重新部署了一次


20201215140933848.png


再来看看act_ge_bytearray,可以发现他并不是将整个压缩包保存起来的,而时间压缩包里的文件单个保存的:


20201215140946820.png


2.3-Deployment文件读取:


@Test
    public void getDeployment(){
        List<Deployment> deployments=repositoryService.createDeploymentQuery().list();
        for(Deployment deployment:deployments){
            System.out.println("ID:"+deployment.getId());
            System.out.println("Name:"+deployment.getName());
            System.out.println("Time:"+deployment.getDeploymentTime());
            System.out.println("Key:"+deployment.getKey());
        }
    }

20201215141015933.png

相关文章
|
1月前
|
算法 数据处理 开发者
FFmpeg库的使用与深度解析:解码音频流流程
FFmpeg库的使用与深度解析:解码音频流流程
36 0
|
1月前
|
消息中间件 Unix Linux
Linux进程间通信(IPC)介绍:详细解析IPC的执行流程、状态和通信机制
Linux进程间通信(IPC)介绍:详细解析IPC的执行流程、状态和通信机制
55 1
|
1月前
|
数据采集 数据可视化 大数据
Python在数据科学中的实际应用:从数据清洗到可视化的全流程解析
Python在数据科学中的实际应用:从数据清洗到可视化的全流程解析
38 1
|
1月前
|
XML 存储 JavaScript
Fiori Elements 框架里 Smart Table 控件工作原理的深入解析
Fiori Elements 框架里 Smart Table 控件工作原理的深入解析
17 0
|
13天前
|
SQL API 数据库
Python中的SQLAlchemy框架:深度解析与实战应用
【4月更文挑战第13天】在Python的众多ORM(对象关系映射)框架中,SQLAlchemy以其功能强大、灵活性和易扩展性脱颖而出,成为许多开发者首选的数据库操作工具。本文将深入探讨SQLAlchemy的核心概念、功能特点以及实战应用,帮助读者更好地理解和使用这一框架。
|
14天前
|
机器学习/深度学习 分布式计算 BI
Flink实时流处理框架原理与应用:面试经验与必备知识点解析
【4月更文挑战第9天】本文详尽探讨了Flink实时流处理框架的原理,包括运行时架构、数据流模型、状态管理和容错机制、资源调度与优化以及与外部系统的集成。此外,还介绍了Flink在实时数据管道、分析、数仓与BI、机器学习等领域的应用实践。同时,文章提供了面试经验与常见问题解析,如Flink与其他系统的对比、实际项目挑战及解决方案,并展望了Flink的未来发展趋势。附带Java DataStream API代码样例,为学习和面试准备提供了实用素材。
37 0
|
23天前
|
C++
C++ While 和 For 循环:流程控制全解析
本文介绍了C++中的`switch`语句和循环结构。`switch`语句根据表达式的值执行匹配的代码块,可以使用`break`终止执行并跳出`switch`。`default`关键字用于处理没有匹配`case`的情况。接着,文章讲述了三种类型的循环:`while`循环在条件满足时执行代码,`do/while`至少执行一次代码再检查条件,`for`循环适用于已知循环次数的情况。`for`循环包含初始化、条件和递增三个部分。此外,还提到了嵌套循环和C++11引入的`foreach`循环,用于遍历数组元素。最后,鼓励读者关注微信公众号`Let us Coding`获取更多内容。
21 0
|
1月前
|
物联网 调度 开发者
构建高效Python Web应用:异步编程与Tornado框架解析
【2月更文挑战第27天】 在处理高并发的Web应用场景时,传统的同步阻塞模型往往难以满足性能需求。本文将深入探讨Python世界中的异步编程概念,并结合Tornado这一轻量级、非阻塞式Web服务器及框架,展示如何构建高性能的Web应用。通过实例驱动的方法论,我们将剖析Tornado的核心组件,包括其IOLoop、异步HTTP客户端和服务器端处理机制,以及与协程集成的细节。文章旨在为开发者提供一套实践指南,帮助他们利用Python实现快速响应和资源高效的Web服务。
31 2
|
1月前
|
算法 Java API
探索Java并发编程:Fork/Join框架的深度解析
【2月更文挑战第26天】随着多核处理器的普及,并发编程在软件开发中的重要性日益凸显。Java语言提供了多种并发工具,其中Fork/Join框架是处理分而治之问题的一个强大工具。本文将深入探讨Fork/Join框架的设计原理、使用场景及与传统线程池的区别,并通过实例演示如何有效利用该框架提升程序性能。
|
1月前
|
SQL API 数据处理
新一代实时数据集成框架 Flink CDC 3.0 —— 核心技术架构解析
本文整理自阿里云开源大数据平台吕宴全关于新一代实时数据集成框架 Flink CDC 3.0 的核心技术架构解析。
729 0
新一代实时数据集成框架 Flink CDC 3.0 —— 核心技术架构解析

推荐镜像

更多