【Flowable 7】学习笔记 01 - 初始化数据库表创建流程(源码)

文章目录

    • 前言
    • 版本说明
    • 配置
    • 1、引擎配置初始化
    • 2、SQL 执行创建表
      • 2.0、创建表概览(创建表数目:38)
      • 2.1、基础组件表创建(以 common 组件为例)
      • 2.2、changelog 组件表创建(基于 liquibase)
      • 2.3、Engine | History 组件表创建
      • 2.4、检查表是否存在

前言

前段时间,RuoYi-Vue-Plus 迎来了 v5.2.0-BETA 版本,其中新增了工作流 Flowable 7

在工作中几乎没有使用过工作流,这一内容是比较陌生的,我在b站上能找到的学习的视频都不算十分满意,大多其实只是讲解如何使用,相关的书(中文版)也比较少,至于原理还是需要自己看源码或者 debug,所以还是需要慢慢学习,接下来如果有空会更新。

本文主要是记录一下初始化建表的流程,作为后续学习参考。可能会有错误的地方,或者是不完善的地方,请见谅。

版本说明

  1. 框架 RuoYi-Vue-Plus 版本:5.2.0-BETAdev 分支)
  2. Flowable 版本:7.0.0

在这里插入图片描述

配置

  1. Flowable 模块:ruoyi-modules/ruoyi-workflow(本文暂不涉及)
  2. 配置:ruoyi-admin/src/main/resources/application.yml
--- #flowable配置
flowable:async-executor-activate: false #关闭定时任务JOB#  将databaseSchemaUpdate设置为true。当Flowable发现库与数据库表结构不一致时,会自动将数据库表结构升级至新版本。database-schema-update: trueactivity-font-name: 宋体label-font-name: 宋体annotation-font-name: 宋体# 关闭各个模块生成表,目前只使用工作流基础表idm:enabled: falsecmmn:enabled: falsedmn:enabled: falseapp:enabled: false

上面的配置中只生成了基础表,其他模块相关表没有生成,所以暂且不关心。结合 AI 简单说明一下各个模块:

  • IDM(Identity Management):身份管理模块,用于管理用户、组织和权限。 它负责处理用户身份验证、授权和用户组管理等任务,以确保系统的安全性和权限控制。

  • CMMN(Case Management Model and Notation):案例管理模块,用于建模和执行复杂的业务案例。 CMMN提供了一种规范的方法来描述业务案例、案例实例和案例任务之间的关系,使得在复杂业务场景下的处理和管理变得更加灵活和可控。

  • DMN(Decision Model and Notation):决策建模与表示模块,用于建模和执行业务决策逻辑。 DMN提供了一种标准的方式来描述决策表、决策规则和决策过程,帮助业务系统更好地实现自动化决策和业务规则管理。

  • APP(Application):应用模块,提供了一个基于Web的用户界面,用于管理和监控流程、任务和案例。 APP模块使得用户能够通过浏览器访问Flowable引擎,进行流程定义、部署、启动、任务处理等操作,从而方便地管理和参与到业务流程中。

1、引擎配置初始化

初始化执行的主要方法:
org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl#init

这个方法用于初始化 Flowable 引擎的配置和各种组件:

  1. initEngineConfigurations():初始化引擎配置。
  2. initConfigurators():初始化配置器。
  3. configuratorsBeforeInit():在初始化之前配置器的初始化。
  4. initClock():初始化时钟。
  5. initObjectMapper():初始化对象映射器。
  6. initProcessDiagramGenerator():初始化流程图生成器。
  7. initCommandContextFactory():初始化命令上下文工厂。
  8. initTransactionContextFactory():初始化事务上下文工厂。
  9. initCommandExecutors():初始化命令执行器。
  10. initIdGenerator():初始化ID生成器。
  11. initHistoryLevel():初始化历史级别。
  12. initFunctionDelegates():初始化函数委托。
  13. initAstFunctionCreators():初始化AST函数创建器。
  14. initDelegateInterceptor():初始化委托拦截器。
  15. initBeans():初始化Beans。
  16. initExpressionManager():初始化表达式管理器。
  17. initMailClients():初始化邮件客户端。
  18. initAgendaFactory():初始化议程工厂。
  19. 根据数据库是否使用,选择性初始化数据源:initDataSource()initNonRelationalDataSource()
  20. 如果使用关系型数据库或者使用模式管理,初始化模式管理器。
  21. 配置变量服务配置和作业服务配置。
  22. initHelpers():初始化助手。
  23. initVariableTypes():初始化变量类型。
  24. initFormEngines():初始化表单引擎。
  25. initFormTypes():初始化表单类型。
  26. initScriptBindingsFactory():初始化脚本绑定工厂。
  27. initScriptingEngines():初始化脚本引擎。
  28. initBusinessCalendarManager():初始化业务日历管理器。
  29. initServices():初始化服务。
  30. initWsdlImporterFactory():初始化WSDL导入器工厂。
  31. initBehaviorFactory():初始化行为工厂。
  32. initListenerFactory():初始化监听器工厂。
  33. initBpmnParser():初始化BPMN解析器。
  34. initProcessDefinitionCache():初始化流程定义缓存。
  35. initProcessDefinitionInfoCache():初始化流程定义信息缓存。
  36. initAppResourceCache():初始化应用资源缓存。
  37. initKnowledgeBaseCache():初始化知识库缓存。
  38. initJobHandlers()initHistoryJobHandlers():初始化作业处理程序和历史作业处理程序。
  39. initTransactionFactory():初始化事务工厂。
  40. 如果使用关系型数据库,初始化SQL会话工厂。
  41. initSessionFactories():初始化会话工厂。
  42. initDataManagers():初始化数据管理器。
  43. initEntityManagers():初始化实体管理器。
  44. initProcessDefinitionDeploymentDeletionManager():初始化流程定义部署删除管理器。
  45. initCandidateManager():初始化候选人管理器。
  46. initVariableAggregator():初始化变量聚合器。
  47. initDependentScopeTypes():初始化依赖范围类型。
  48. initHistoryConfigurationSettings():初始化历史配置设置。
  49. initHistoryManager():初始化历史管理器。
  50. initChangeTenantIdManager():初始化更改租户ID管理器。
  51. initDynamicStateManager():初始化动态状态管理器。
  52. initProcessInstanceMigrationValidationManager():初始化流程实例迁移验证管理器。
  53. initIdentityLinkInterceptor():初始化身份链接拦截器。
  54. initJpa():初始化JPA。
  55. initDeployers():初始化部署器。
  56. initEventHandlers():初始化事件处理程序。
  57. initFailedJobCommandFactory():初始化失败作业命令工厂。
  58. initEventDispatcher():初始化事件分发器。
  59. initProcessValidator():初始化流程验证器。
  60. initFormFieldHandler():初始化表单字段处理程序。
  61. initDatabaseEventLogging():初始化数据库事件日志记录。
  62. initFlowable5CompatibilityHandler():初始化Flowable 5兼容性处理程序。
  63. initVariableServiceConfiguration()initIdentityLinkServiceConfiguration()initEntityLinkServiceConfiguration()initEventSubscriptionServiceConfiguration()initTaskServiceConfiguration()initJobServiceConfiguration()initBatchServiceConfiguration():初始化各种服务配置。
  64. initAsyncTaskInvoker()initAsyncExecutor()initAsyncHistoryExecutor():初始化异步任务调用程序、异步执行器和异步历史执行器。
  65. configuratorsAfterInit():在初始化之后的配置器初始化。
  66. afterInitTaskServiceConfiguration()afterInitEventRegistryEventBusConsumer():在初始化任务服务配置之后和初始化事件注册表事件总线消费者之后的操作。
  67. initHistoryCleaningManager():初始化历史清理管理器。
  68. initLocalizationManagers():初始化本地化管理器。

2、SQL 执行创建表

2.0、创建表概览(创建表数目:38)

序号SQL文件名(生成表数量)创建表名称生成逻辑对应 Manager备注
1.flowable.mysql.create.common.sql(2)ACT_GE_PROPERTY
ACT_GE_BYTEARRAY
CommonDbSchemaManager
2.liquibase.sqlgenerator.SqlGenerator(2)FLW_EV_DATABASECHANGELOGLOCK
FLW_EV_DATABASECHANGELOG
执行方法:
CreateDatabaseChangeLogLockTableGenerator#generateSql
CreateDatabaseChangeLogTableGenerator#generateSql
3.flowable-eventregistry-db-changelog.xml(4)FLW_EVENT_DEPLOYMENT
FLW_EVENT_RESOURCE
FLW_EVENT_DEFINITION
FLW_CHANNEL_DEFINITION
EventDbSchemaManager(包含三个部分 changeSet
4.flowable.mysql.create.identitylink.sql(1)ACT_RU_IDENTITYLINKIdentityLinkDbSchemaManager
5.flowable.mysql.create.identitylink.history.sql(1)ACT_HI_IDENTITYLINKIdentityLinkDbSchemaManager
6.flowable.mysql.create.entitylink.sql(1)ACT_RU_ENTITYLINKEntityLinkDbSchemaManager
7.flowable.mysql.create.entitylink.history.sql(1)ACT_HI_ENTITYLINKEntityLinkDbSchemaManager
8.flowable.mysql.create.eventsubscription.sql(1)ACT_RU_EVENT_SUBSCREventSubscriptionDbSchemaManager
9.flowable.mysql.create.task.sql(1)ACT_RU_TASKTaskDbSchemaManager
10.flowable.mysql.create.task.history.sql(2)ACT_HI_TASKINST
ACT_HI_TSK_LOG
TaskDbSchemaManager
11.flowable.mysql.create.variable.sql(1)ACT_RU_VARIABLEVariableDbSchemaManager
12.flowable.mysql.create.variable.history.sql(1)ACT_HI_VARINSTVariableDbSchemaManager
13.flowable.mysql.create.job.sql(6)ACT_RU_JOB
ACT_RU_TIMER_JOB
ACT_RU_SUSPENDED_JOB
ACT_RU_DEADLETTER_JOB
ACT_RU_HISTORY_JOB
ACT_RU_EXTERNAL_JOB
JobDbSchemaManager
14.flowable.mysql.create.batch.sql(2)FLW_RU_BATCH
FLW_RU_BATCH_PART
BatchDbSchemaManager
15.flowable.mysql.create.engine.sql(7)ACT_RE_DEPLOYMENT
ACT_RE_MODEL
ACT_RU_EXECUTION
ACT_RE_PROCDEF
ACT_EVT_LOG
ACT_PROCDEF_INFO
ACT_RU_ACTINST
ProcessDbSchemaManager
16.flowable.mysql.create.history.sql(5)ACT_HI_PROCINST
ACT_HI_ACTINST
ACT_HI_DETAIL
ACT_HI_COMMENT
ACT_HI_ATTACHMENT
ProcessDbSchemaManager

同样结合 AI 说明一下表前缀:

  1. ACT_RE(Repository)

    • 存储静态信息:这个前缀表示repository,即存储。带有这个前缀的表包含的是静态信息,例如流程定义和流程的资源(如图片、规则等)。
    • 与建模相关的操作:这些表通常是由RepositoryService接口操作,涉及到流程定义的部署、查询和管理等操作。
  2. ACT_RU(Runtime)

    • 存储运行时数据:这个前缀表示runtime,即运行时。带有这个前缀的表存储着流程变量、用户任务、变量、职责(job)等运行时的数据。
    • 流程实例执行期间的数据:Flowable只存储实例执行期间的运行时数据,当流程实例结束时,将删除这些记录。这就保证了这些运行时的表小且快,提高了性能。
  3. ACT_ID(Identity)

    • 管理组织机构信息:这个前缀表示identity,即身份。带有这个前缀的表包含标识的信息,如用户、用户组等组织机构相关的数据。
    • 支持用户身份管理和权限控制:这些表支持用户身份的创建、修改、删除、密码修改、登录等功能,以及用户分组和权限管理。
  4. ACT_HI(History)

    • 存储历史数据:这个前缀表示history,即历史。带有这个前缀的表包含着历史的相关数据,如结束的流程实例、变量、任务等。
    • 审计和报告:这些表用于审计和报告目的,记录了流程实例的历史信息,方便用户查看和分析流程的执行情况。
  5. ACT_GE(General)

    • 通用数据表:这个前缀没有特定的指向,表示general,即通用。带有这个前缀的表被用于各种情况,包含通用的流程定义和流程资源等信息。
    • 系统相关属性:这些表还可能包含系统相关的属性设置,如系统的配置信息等。
  6. FLW(Flowable Work或Engage)

    • 特定于Flowable Work或Engage的表:以FLW_前缀开头的数据库表是特定于Flowable Work或Engage的,这两个产品分别提供了工作流和数字化业务流程服务。
    • 区分核心功能和特定产品功能:这样的命名方式有助于区分Flowable核心功能和特定产品功能相关的数据表。

2.1、基础组件表创建(以 common 组件为例)

common 组件是最早执行生成的,因此以 common 为例进行说明,对应的 manager 是 CommonDbSchemaManager,是 ServiceSqlScriptBasedDbSchemaManager 的扩展。不同的组件有不同的扩展:

在这里插入图片描述

不同的扩展 实现对应执行相关的 sql 文件,命名遵循相关的规范。common 组件对应的 sql 文件:flowable.mysql.create.common.sql

调用链:

  • org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl#init
  • org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl#initSchemaManager
  • org.flowable.common.engine.impl.AbstractEngineConfiguration#initSchemaManager

在这里插入图片描述

  • org.flowable.common.engine.impl.db.LiquibaseBasedSchemaManager#initSchema
  • org.flowable.eventregistry.impl.db.EventDbSchemaManager#schemaUpdate
  • org.flowable.common.engine.impl.db.ServiceSqlScriptBasedDbSchemaManager#schemaUpdate
  • org.flowable.common.engine.impl.db.ServiceSqlScriptBasedDbSchemaManager#schemaCreate
  • org.flowable.common.engine.impl.db.ServiceSqlScriptBasedDbSchemaManager#internalDbSchemaCreate

在这里插入图片描述

sql 文件:

在这里插入图片描述

在这里插入图片描述

  • org.flowable.common.engine.impl.db.AbstractSqlScriptBasedDbSchemaManager#executeSchemaResource

在这里插入图片描述

在这里插入图片描述

创建表:

在这里插入图片描述

日志输出:

在这里插入图片描述

2.2、changelog 组件表创建(基于 liquibase)

在调用 flowable-eventregistry-db-changelog.xml 时,先生成了两个 changelog 表。对应的类:org.flowable.eventregistry.impl.db.EventDbSchemaManager

调用链:

  • org.flowable.common.engine.impl.db.LiquibaseBasedSchemaManager#initSchema
  • org.flowable.common.engine.impl.db.LiquibaseBasedSchemaManager#schemaUpdate
  • ……
  • liquibase.command.core.helpers.DatabaseChangelogCommandStep#run
  • liquibase.command.core.helpers.DatabaseChangelogCommandStep#checkLiquibaseTables

在这里插入图片描述

  • 1:changeLogHistoryService.init();
  • liquibase.changelog.StandardChangeLogHistoryService#init
  • ……
  • liquibase.sqlgenerator.core.CreateDatabaseChangeLogTableGenerator#generateSql
  • 2:LockServiceFactory.getInstance().getLockService(database).init();
  • liquibase.lockservice.StandardLockService#init
  • ……
  • liquibase.sqlgenerator.core.CreateDatabaseChangeLogLockTableGenerator#generateSql
  • ……
  • org.flowable.engine.impl.db.ProcessDbSchemaManager#schemaUpdate (Engine | History 组件表创建)

2.3、Engine | History 组件表创建

sql 文件: flowable.mysql.create.engine.sqlflowable.mysql.create.history.sql

调用链:

  • org.flowable.spring.SpringProcessEngineConfiguration#buildProcessEngine
  • org.flowable.engine.impl.ProcessEngineImpl#ProcessEngineImpl
  • org.flowable.engine.impl.SchemaOperationsProcessEngineBuild#execute
  • org.flowable.engine.impl.db.ProcessDbSchemaManager#schemaUpdate

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.4、检查表是否存在

由于配置 database-schema-updatetrue,应用每次启动,Flowable 都会检查表是否存在以及是否需要更新表。

如果设置为 false,则假定数据库已经是最新状态,不做任何更新。
设置为 validate 时,仅验证 Schema 是否匹配,不执行更新操作。
设置为 update 时,如有需要则更新 Schema。

底层判断逻辑:

  • org.flowable.common.engine.impl.db.ServiceSqlScriptBasedDbSchemaManager#schemaCreate

在这里插入图片描述

在这里插入图片描述

  • org.flowable.common.engine.impl.db.AbstractSqlScriptBasedDbSchemaManager#isTablePresent

  • org.flowable.engine.impl.db.ProcessDbSchemaManager#schemaUpdate
  • org.flowable.common.engine.impl.db.ServiceSqlScriptBasedDbSchemaManager#schemaUpdate

在这里插入图片描述

(完)

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

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

相关文章

探索机器人智能设备:开启智慧生活新篇章

机器人智能设备作为科技创新的代表,正以其独特的魅力吸引着越来越多的关注。它们不仅具备高度的智能化和自主化能力,还能在各种场景下发挥出强大的功能。 机器人智能设备的张总说:在智能家居领域,机器人智能设备可以帮助我们实现家…

计算机网络导论

网络结构的演变 网状结构 最开始的网络,主机之间都是两两相连 好处 这样连接,好处是安全性比较高(A与B之间的连线断了,可以绕一下C); 另外通信不需要互相等待(没有中间交换设备,所…

头文件大小写引发的报错

jenkins下打包编译报错如下,提示编译zynqCan.c时找不到“syscfgpll/sysCfgpll.h”文件。 但IDE下编译是没有报错也没有警告的,工程中也存在文件“syscfgpll/sysCfgPll.h”。 仔细观察发现,报错说的是找不到头文件“syscfgpll/sysCfgpll.h”…

09Django项目--用户管理系统--删

对应视频链接点击直达 09Django项目--用户管理系统--删 对应视频链接点击直达删a,本质b,删除 页面相关a,index页面新增操作按钮b,ajax删除和提示c,完整版本 OVER,不会有人不会吧不会的加Q1394006513结语 一…

视频监控汇聚平台LntonCVS视频安防监控平台城市积水智能监测应用方案

根据中央气象台的最新预报,我国南方地区即将面临一轮强烈的降雨天气。这场降雨预计将会给部分地区带来大到暴雨的降水量,甚至在某些局部地区可能出现极端的大暴雨情况。与此同时,华北、黄淮以及东北地区也可能会遭受雷雨天气的干扰&#xff0…

Python | Leetcode Python题解之第118题杨辉三角

题目: 题解: class Solution:def generate(self, numRows: int) -> List[List[int]]:ret list()for i in range(numRows):row list()for j in range(0, i 1):if j 0 or j i:row.append(1)else:row.append(ret[i - 1][j] ret[i - 1][j - 1])ret…

电商api接口进行数据采集获取淘宝/天猫/京东/抖音多平台商品价格

在电商运营中,从品牌角度来看,品牌方通过电商数据采集API接口进行数据采集,获取多渠道商品价格信息的这一行为,能为品牌方带来诸多好处: 及时准确:API接口能为品牌提供实时数据,这意味着企业可…

RT-DETR算法改进【NO.1】借鉴CVPR2024中的StarNet网络StarBlock改进算法

前 言 YOLO算法改进的路有点拥挤,尝试选择其他的baseline作为算法研究,可能会更加好发一些文章。后面将陆续介绍RT-DETR算法改进的方法思路。 很多朋友问改进如何选择是最佳的,下面我就根据个人多年的写作发文章以及指导发文章的经验来看,按照优先顺序进行排序讲解…

德克萨斯大学奥斯汀分校自然语言处理硕士课程汉化版(第二周) - 多类别分类和神经网络

多类别分类和神经网络 1. 多类别分类2. 多类别感知机和多类别逻辑回归3. 多类别分类的场景4. 分类公平性5. 神经网络6. 神经网络可视化7. 神经网络的前向传播和反向传播8. 神经网络的训练与优化 1. 多类别分类 分类是一个预测建模问题,它涉及到在给定输入的情况下…

第十二周 5.21面向对象的三大特性(封装、继承、多态)(二)

三、多态 1.理解: (1)多态:父类型的引用存储不同子类型的对象 父类类名 引用名 new 子类类名(); 引用 对象 父类型 子类型 …

数字孪生技术助力智慧园区建设

随着城市化进程的加速和科技创新的推动,城市面临着诸多挑战和机遇。如何提升城市的竞争力和可持续性,是一个亟待解决的问题。在这个背景下,智慧园区作为一种新型的城市发展模式,引起了越来越多的关注和探索。 什么是智慧园区&…

启智CV机器人,ROS,ubuntu 20.04 【最后一步有问题】

资料: https://wiki.ros.org/kinetic/Installation/Ubuntu https://blog.csdn.net/qq_44339029/article/details/120579608 装VM。 装ubuntu20.04 desktop.iso系统。 装vm工具: sudo apt update sudo dpkg --configure -a sudo apt-get autoremove o…

拉普拉斯IPO:科技与产业深度融合,实现业务领域延展

我国拥有全球最具竞争优势的光伏产业链,基于降本增效的需求,光伏产业对于技术革新具有持续的需求。拉普拉斯新能源科技股份有限公司(以下简称“拉普拉斯”)凭借深厚的技术积累,以及对光伏产业深刻的理解,聚…

zabbix配置自动发现规则模版-snmp

配置-->模版-->创建模版 找到刚才创建的模版进行编辑 创建一个自动发现规则(SNMP OID 一般配置表中较有代表性的字段的OID) 修改监控项原型 创建一台主机并链接模版 测试,获得预计自动发现的监控项的值 上述测试不为空&#xff0c…

成都蓝蛙科技引领AIGC创新,亮相中国AIGC开发者大会

2024年5月25日,第三届AIGC中国开发者大会在北京举行,蓝蛙科技公司CEO兼创始人李辰受邀出席并发表主题演讲。作为开源框架GeneralAgent的作者,发表了题为“Agent框架的挑战和解决方案”的精彩演讲。李辰先生深入探讨了在构建和部署基于大型语言…

【C++】数据结构:哈希桶

哈希桶(Hash Bucket)是哈希表(Hash Table)实现中的一种数据结构,用于解决哈希冲突问题。哈希表是一种非常高效的数据结构,它通过一个特定的函数(哈希函数)将输入数据(通常…

移动应用程序设计详解:基本概念和原理

移动应用程序设计是什么? 一般来说,应用程序设计师的核心职责是让用户有体验应用的欲望,而开发者负责让它正常工作。移动应用程序设计包括用户界面 (UI) 和用户体验 (UX)。设计者负责应用程序的整体风格,包括配色方案、字体选择、…

基于分块贝叶斯非局部均值优化(OBNLM)的图像去噪算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 块定义与相似度计算 ​4.2 贝叶斯框架下的加权融合 4.3 加权最小均方误差估计 5.完整程序 1.程序功能描述 基于分块贝叶斯非局部均值优化(OBNLM)的图像去噪算法matlab仿真&#xff0c…

SA316系列音频传输模块-传输距离升级音质不打折

SA316是思为无线研发的一款远距离音频传输模块,音频采样率为48K,传输距离可达200M。为了满足更多用户需求,思为无线在SA316基础上进一步增加传输距离推出SA316F30。相比SA316性能,同样其采用48K采样,-96dBm灵敏度&…

SAP PP学习笔记 - 错误 CX_SLD_API_EXCEPTION - Job dump is not fully saved (too big)

我这个错误是跑完MRP,然后在MD04查看在库/所有量一览, 点计划手配(Planned order 计划订单)生成 制造指图(Production order 生产订单), 到目前这几步都OK,然后在制造指图界面点保…