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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 万字解析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

相关文章
|
6天前
|
监控 安全 开发工具
鸿蒙HarmonyOS应用开发 | HarmonyOS Next-从应用开发到上架全流程解析
HarmonyOS Next是华为推出的最新版本鸿蒙操作系统,强调多设备协同和分布式技术,提供丰富的开发工具和API接口。本文详细解析了从应用开发到上架的全流程,包括环境搭建、应用设计与开发、多设备适配、测试调试、应用上架及推广等环节,并介绍了鸿蒙原生应用开发者激励计划,帮助开发者更好地融入鸿蒙生态。通过DevEco Studio集成开发环境和华为提供的多种支持工具,开发者可以轻松创建并发布高质量的鸿蒙应用,享受技术和市场推广的双重支持。
140 11
|
2月前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
48 3
|
2月前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
168 3
|
3天前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
9天前
|
域名解析 弹性计算 安全
阿里云服务器租用、注册域名、备案及域名解析完整流程参考(图文教程)
对于很多初次建站的用户来说,选购云服务器和注册应及备案和域名解析步骤必须了解的,目前轻量云服务器2核2G68元一年,2核4G4M服务器298元一年,域名注册方面,阿里云推出域名1元购买活动,新用户注册com和cn域名2年首年仅需0元,xyz和top等域名首年仅需1元。对于建站的用户来说,购买完云服务器并注册好域名之后,下一步还需要操作备案和域名绑定。本文为大家展示阿里云服务器的购买流程,域名注册、绑定以及备案的完整流程,全文以图文教程形式为大家展示具体细节及注意事项,以供新手用户参考。
|
27天前
|
缓存 监控 Java
Java线程池提交任务流程底层源码与源码解析
【11月更文挑战第30天】嘿,各位技术爱好者们,今天咱们来聊聊Java线程池提交任务的底层源码与源码解析。作为一个资深的Java开发者,我相信你一定对线程池并不陌生。线程池作为并发编程中的一大利器,其重要性不言而喻。今天,我将以对话的方式,带你一步步深入线程池的奥秘,从概述到功能点,再到背景和业务点,最后到底层原理和示例,让你对线程池有一个全新的认识。
54 12
|
1月前
|
开发框架 Dart Android开发
安卓与iOS的跨平台开发:Flutter框架深度解析
在移动应用开发的海洋中,Flutter作为一艘灵活的帆船,正引领着开发者们驶向跨平台开发的新纪元。本文将揭开Flutter神秘的面纱,从其架构到核心特性,再到实际应用案例,我们将一同探索这个由谷歌打造的开源UI工具包如何让安卓与iOS应用开发变得更加高效而统一。你将看到,借助Flutter,打造精美、高性能的应用不再是难题,而是变成了一场创造性的旅程。
|
1月前
|
存储 Java 开发者
Java中的集合框架深入解析
【10月更文挑战第32天】本文旨在为读者揭开Java集合框架的神秘面纱,通过深入浅出的方式介绍其内部结构与运作机制。我们将从集合框架的设计哲学出发,探讨其如何影响我们的编程实践,并配以代码示例,展示如何在真实场景中应用这些知识。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和实用技巧。
34 0
|
2月前
|
JavaScript 前端开发 UED
Vue执行流程及渲染解析
【10月更文挑战第5天】
|
2月前
|
存储 搜索推荐 数据库
运用LangChain赋能企业规章制度制定:深入解析Retrieval-Augmented Generation(RAG)技术如何革新内部管理文件起草流程,实现高效合规与个性化定制的完美结合——实战指南与代码示例全面呈现
【10月更文挑战第3天】构建公司规章制度时,需融合业务实际与管理理论,制定合规且促发展的规则体系。尤其在数字化转型背景下,利用LangChain框架中的RAG技术,可提升规章制定效率与质量。通过Chroma向量数据库存储规章制度文本,并使用OpenAI Embeddings处理文本向量化,将现有文档转换后插入数据库。基于此,构建RAG生成器,根据输入问题检索信息并生成规章制度草案,加快更新速度并确保内容准确,灵活应对法律与业务变化,提高管理效率。此方法结合了先进的人工智能技术,展现了未来规章制度制定的新方向。
50 3

热门文章

最新文章

推荐镜像

更多