一.简介

我们使用了 Spring Boot 之后,默认情况下流程是会自动部署的,基本上不需要我们额外做什么事情,我们称之为默认部署
有的时候,我们的流程可能并不是提前设计好的,而是项目启动之后,动态部署的,例如项目启动成功之后,动态上传一个流程的 XML 文件进行部署,这也是一种比较常见的场景,我们称之为动态部署

二.默认部署

默认情况下,我们放在 resources/processes 目录下的所有流程文件会自动被部署,流程文件的后缀有两种形式 bpmn20.xml 或者 bpmn。当然,无论是存放流程文件的位置,还是流程文件的格式,都是可以定制的,涉及到的属性主要有三个,可在 application.properties 中进行配置,代码如下:

flowable.check-process-definitions=false
flowable.process-definition-location-prefix=classpath*:/processes/
flowable.process-definition-location-suffixes=**.bpmn20.xml,**.bpmn

flowable.check-process-definitions:这个表示是否在项目启动的时候,去检查文件目录是否有对应的流程文件,该属性为 true 表示如果有流程文件就自动部署,false 表示不检查,那么也就不会自动部署。

flowable.process-definition-location-prefix:这个是流程文件的位置,默认就是 classpath*:/processes/,当然开发者也可以进行配置。

flowable.process-definition-location-suffixes:这个是流程文件的后缀,默认有两个,分别是 **.bpmn20.xml 和 **.bpmn,当然开发者也可以进行配置。

三.动态部署

有的时候,我们的流程可能并不是提前设计好的,而是项目启动之后,动态部署的,例如项目启动成功之后,动态上传一个流程的 XML 文件进行部署,这也是一种比较常见的场景,对于这种情况,我们可以按照如下方式进行部署,代码如下:

@RestController
public class ProcessDeployController {@AutowiredRepositoryService repositoryService;@PostMapping("/deploy")public RespBean deploy(MultipartFile file) throws IOException {DeploymentBuilder deploymentBuilder = repositoryService.createDeployment().category("javaboy的工作流分类").name("javaboy的工作流名称").addInputStream(file.getOriginalFilename(), file.getInputStream()).key("javaboy的工作流key");Deployment deployment = deploymentBuilder.deploy();return RespBean.ok("部署成功",deployment.getId());}
}

看下流程部署:

首先通过 repositoryService.createDeployment() 方法来创建一个流程部署构建器,即 DeploymentBuilder。

接下来为 DeploymentBuilder 设置分类、名称以及 key 等属性。

关键的方法是 addInputStream,通过该方法去指定流程文件。官方的提供的指定流程文件的方式有好几种;除了 addInputStream 之外,另外还有一个 addString,这个就是将流程文件转为一个字符串传入进来;addBytes 是将流程文件转为字节数组传进来;addClasspathResource 方法则是直接从 classpath 目录下去加载流程文件,这几个方法根据自己的使用场景选择一个合适的方法去调用即可。

这里有一个地方要注意,就是 addInputStream/addBytes/addString 等方法都需要设置资源名,这个名称是可以随意设置的,但是注意名称的后缀,需要是 bpmn20.xml 或者 bpmn,否则流程没有部署。

四.表分析

流程部署过程中,一共有三张表参与了,分别是ACT_RE_DEPLOYMENTACT_RE_PROCDEFACT_GE_BYTEARRAY

1.ACT_RE_DEPLOYMENT

这个表是流程部署表,每部署一个流程,这张表中就会新增一条记录,用来描述我们刚刚定义好的流程:
这里的 ID_、NAME_、CATEGORY_ 等等,就是我们在部署流程的时候设置的参数。

2.ACT_RE_PROCDEF

这是流程定义表,我们每定义的一个流程,都会记录在这张表中:

DEPLOYMENT_ID 字段,和 ACT_RE_DEPLOYMENT 表进行关联,所以 ACT_RE_DEPLOYMENT 和 ACT_RE_PROCDEF 表的关系,其实是一对一的关系,部署表中的一条记录对应定义表中的一条记录。

另外,该表中有一个 CATEGORY_ 的字段,这个字段表示流程的分类,注意这个和部署的分类可不一样,流程部署的分类参数第二小节的代码,流程的分类,说白了其实就是我们流程定义 XML 文件中的 targetNamespace 属性,如下图:

可根据自己的实际需求去修改 targetNamespace 属性的值,这个值改了之后,ACT_RE_PROCDEF 表中的 CATEGORY_ 字段也会跟着发生变化。

另外,该表中还有一个 VERSION_ 字段,这个看名字就知道是描述记录的版本号,当我们修改了流程的内容之后,重新部署的时候,ACT_RE_DEPLOYMENT 表和 ACT_RE_PROCDEF 表均会自动增加一条记录数,其中,流程定义表 ACT_RE_PROCDEF 中的记录的 VERSION_ 字段的值会自动加 1,这样我们就能够看到不同历史版本的流程定义。

那么系统是怎么识别修改后的流程和前一个流程是同一个呢?主要是靠流程的 id 属性,如下图:

这个流程的 id 属性,对应到表中,就是 ACT_RE_PROCDEF 表的 KEY_ 字段。

3.ACT_GE_BYTEARRAY

涉及到的第三张表是这个通用数据存储表,这个表的字段比较少,如下图:

这个表中有一个 DEPLOYMENT_ID 字段,这个就是跟 ACT_RE_DEPLOYMENT 表关联的字段,一条流程部署记录在 ACT_GE_BYTEARRAY 表中对应两条记录,分别是记录 XML 文件和记录流程图片。

这个表中有一个 BYTES_ 字段,我们部署的流程的 XML 文件就保存在这里,同时,系统默认还会根据 XML 文件生成一张流程图片,也保存在这里,图片就像下面这种:

所以一个流程部署,在这张表中对应两条记录,一条记录 XML 文件,一条记录流程图片。

Flowable 流程定义(流程模板)的部署及设计的数据库表相关推荐

  1. Spring中部署Activiti流程定义的三种姿势

    摘要:本文对工作流Activiti框架中流程定义的部署进行了详细说明介绍. 本文分享自华为云社区<项目中工作流部署详细解析!Spring中部署Activiti流程定义的三种姿势>,作者:攻 ...

  2. camunda工作流引擎流程定义部署 流程定义查询 激活流程实例

    camunda工作流引擎流程定义部署 流程定义查询 激活流程实例 1.通过xml字符串部署流程定义 /*** 通过xml字符串部署流程定义* @param processModelVo* @retur ...

  3. Activiti6自学之路(五)—— 部署流程资源的四种方式及数据库表更新情况

    创建了流程图资源后, 一般我们需要对创建的资源如(leave.bpmn.leave.png)进行部署,部署方式我这里列出四种方式,前三种为单个流程资源的部署,第四种方式可以同时部署多个流程资源. 一. ...

  4. (一)Activiti 数据库25张表——流程定义表9(ACT_RE_PROCDEF)

    ACT_RE_PROCDEF 简介: 流程定义数据表 详细说明: 业务流程定义数据表.此表和 ACT_RE_DEPLOYMENT 是多对一的关系,即,一个部署的bar包里可能包含多个流程定义文件,每个 ...

  5. Flowable基本使用介绍和Flowable数据库表解释

    1.Flowable是什么? Flowable是一个使用Java编写的轻量级业务流程引擎.Flowable流程引擎可用于部署BPMN 2.0流程定义(用于定义流程的行业XML标准), 创建这些流程定义 ...

  6. flowable 和activiti 数据库表结构对比说明

    activiti表共25张 flowable大概40张 1.Flowable的所有数据库表都以ACT_开头.第二部分是说明表用途的两字符标示符.服务API的命名也大略符合这个规则. 2.ACT_RE_ ...

  7. Flowable 数据库表结构 ACT_RE_MODEL

    流程设计模型部署表( act_re_model ) 流程设计器设计流程后,保存数据到该表. 字段名称 字段描述 数据类型 主键 为空 取值说明 ID_ ID_ nvarchar(64) √ ID_ I ...

  8. Flowable 数据库表结构 ACT_RE_PROCDEF

    流程定义数据表( act_re_procdef ) 业务流程定义数据表.此表和 ACT_RE_DEPLOYMENT 是多对一的关系,即,一个部署的bar包里可能包含多个流程定义文件,每个流程定义文件都 ...

  9. activiti自己定义流程之Spring整合activiti-modeler5.16实例(四):部署流程定义

    注:(1)环境搭建:activiti自己定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建         (2)创建流程模型:activiti自己定义流程之Spr ...

最新文章

  1. 波段 ku_X和Ku波段小尺寸无线电设计
  2. NoSQL(三):主从复制
  3. Go 2. 两数相加
  4. android之frame动画详解
  5. 算法第二章实践上机实验报告
  6. 异步 HttpContext.Current 为空null 另一种解决方法
  7. 剑指offer例题分享--7
  8. MT4 服务器信号,手机实时接收MT4软件指标信号(简单几步设置搞定)
  9. MySql常用函数大全讲解
  10. 每一个互联网公司都要掌握的《计算广告》,它是数据与计算的灵魂
  11. SEO人员,三思而后行,要规避为哪些行业做SEO?
  12. 如何能正常获取17track物流网站的物流信息?
  13. 微软的黑屏说明了什么?
  14. 终于有人把3D打印讲明白了
  15. 嵌入式软件单元测试 的必要性和心得
  16. zoj 3864 Quiz for EXO-L(连通块 bfs)
  17. 麦肯锡七步成诗法(转载)
  18. 【其他】什么是Blog? 什么是博客? 什么是Blogger?重要的是内容!!!
  19. 经验分享:写给入职2~3年同学的一封信
  20. Parallels Desktop Business Edition 13.2.0虚拟机破解版

热门文章

  1. 武汉市第二轻工业学校有没计算机科学与技术,武汉第二轻工业学校2021年招生简章...
  2. Linux使用花生壳进行内网穿透
  3. python获取豆瓣电影
  4. 内存取证CTF-Memlabs靶场1
  5. 22-C++基础-浮点数
  6. 中科院计算机控制学院难度,你的报考院校正在被“吐槽”,你造吗?
  7. 如何一直后台运行,可靠,安卓9 ,p30 亲测
  8. 我用Python做了个股票分析工具,还真好用!!
  9. scanf() — 格式化输入
  10. NXP S32K1xx系列芯片解锁指南(J-Link)