Activiti工作流引擎Mysql迁移到TiDB

由于Mysql和TiDB 参数lower_case_table_name 默认值有差异 且TiDB(2020年5月28发布的4.0.0最新版)不可修改导致
在TiDB中执行 SHOW FULL TABLES FROM oa_ bpm LIKE ${tableName} 语句 tableName 只能匹配到小写表名。
OA流程引擎启动时 会执行SHOW FULL TABLES FROM 语句判断内置的数据表是否存在(ACT_RU_EXECUTION,ACT_HI_PROCINST,ACT_ID_USER)。

根据目前的activiti engine配置属性 ,如果指定表已经存在 会更新则会更新其数据,不存在指定数据表时 ,则重新创建对应的表结构 。
由于OA流程引擎其基于开源项目Activiti工作流引擎(5.22.0),其源码 org.activiti.engine.impl.db.DbSqlSession中固定写死大写的表名,

因此即使指定的表已存在,Activiti工作流引擎使用TiDB数据源时,相关方法(isEngineTablePresent,isHistoryTablePresent,isIdentityTablePresent)依旧返回false
因此错误的执行了建表语句 但是又由于TiDB中 CREATE TABLE 语句并不区分表名大小写,导致建表失败(Table ‘oa_bpm.{tableName}’ already exists)
最终导致引用了activiti模块的 bpm-model,bpm-runtime模块启动失败

在项目引用了的activiti模块中修改配置
在项目启动时 Activiti工作流引擎初始之前使用Javassist字节码框架
动态修改org.activiti.engine.impl.db.DbSqlSession的字节码
将其3个方法isEngineTablePresent,isHistoryTablePresent,isIdentityTablePresent 中大写表名重新定义为小写(小写兼容Mysql和TiDB)

	
	/**
	 * Hook3个activiti探测表的方法 解决activiti engine启动时 在TiDB执行 SHOW FULL TABLES FROM `oa_bpm` LIKE 'tableName'
	 * tableName只支
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Activiti 是一种开源的工作流引擎,用于实现和管理业务流程。封装一个 Activiti 工作流引擎的 Demo 可以帮助我们更好地理解和使用这个工具。下面我将介绍如何封装一个 Activiti 工作流引擎的 Demo。 首先,我们需要在项目中引入 Activiti 的依赖,可以通过 Maven 或者手动导入 jar 包的方式。接下来,我们可以创建一个基于 Spring Boot 的应用程序。 在 Demo 中,我们需要定义一些基本的流程定义和流程实例。流程定义是一个流程模板,描述了业务流程的结构和步骤;而流程实例是流程定义的一个具体执行过程。 为了创建流程定义,我们需要使用 Activiti 提供的 ProcessEngineConfigurator 类。该类可以帮助我们初始化和配置 Activiti 引擎。在配置文件中,我们可以定义数据库连接信息、创建流程定义的方式以及其他相关配置。 在 Demo 中,我们可以使用 BPMN (Business Process Model and Notation)来定义流程模型。BPMN 是一种标准化的图形化表示语言,可以帮助我们更好地理解和管理业务流程。我们可以使用 Activiti 提供的设计器来创建和编辑 BPMN 文件。 接下来,我们需要实现流程定义的部署和启动。部署是将流程定义存储在 Activiti 引擎中的过程,启动是根据定义的流程模板创建一个流程实例。 我们可以使用 Activiti 提供的 RepositoryService 来进行部署操作。通过该服务,我们可以将 BPMN 文件部署到引擎中,并且可以查询已经部署的流程定义。 通过调用 RuntimeService 的 startProcessInstanceByKey 方法,我们可以根据流程定义的 key(在部署时定义的)启动一个流程实例。 在流程实例启动后,我们可以使用 TaskService 进行任务分配和处理。可以通过查询特定用户的待办任务和已完成任务,完成任务的提交操作。 最后,我们可以使用 HistoryService 来查询已完成的流程实例和任务的历史记录。这可以帮助我们进行流程性能和效率的评估。 封装一个 Activiti 工作流引擎的 Demo,可以帮助我们更好地了解和使用这个工作流引擎。通过实际的示例,我们可以学习如何创建流程定义、部署和启动流程实例、处理任务以及查询历史记录等操作。这将帮助我们更好地管理和优化业务流程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值