activiti 数据库升级 upgrade

简介: 分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519)在项目中我们如果使用activiti 工作流引擎的时候,肯定是需要数据库支持的,如果有一天我们打算升级activi...


分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519)

在项目中我们如果使用activiti 工作流引擎的时候,肯定是需要数据库支持的,如果有一天我们打算升级activiti 工作流引擎的时候,那么对应的数据库表或者视图也是需要升级,因为有可能表结构有调整,举例:activiti 5.14的时候act_re_deployment表中没有tenant_id_字段,activiti 5.19有这个字段了,那我们升级的时候,肯定需要升级数据库了,下面详细的讲解如何升级数据库。

1.1.1. 第一种方式 手动sql方式

我们首先打开我们下载的activiti 工程,目录结构如下所示:

 

 

打开database目录,结构如下图所示:

 

目录说明:

create 数据库、表视图、索引的创建脚本。

drop 数据库、表视图、索引的删除脚本。(删除引擎最好这种方式删除的比较干净)

upgrade 数据库、表视图、索引的升级脚本。

目录里面的sql命名规范:

activiti.db2.create.history.sql

activiti:activiti工作流的标示。

db2 数据库厂商的名称(可以是mysqlh2oraclepostgres)比如我用的是postgres数据库,那么操作的时候选择activiti.postgres开头的即可。

create:创建数据库的意思,那对应的肯定有dropupgradestep标示符,操作的时候选择对应的即可。

最后一个标示符history,因为sql创建表的时候分为三个大的sql脚本。

1.engine核心的创建表语句、主要是ru*表等。

2.history 主要创建工作流的hi*表。

3.identity 主要创建工作流的用户表、id*以及用户信息表(扩展表的时候可以不使用这个,后面权限构建章节会详细讲解)

 

上面对目录做了一个介绍,接下来就进入upgrade目录中,如下图所示是upgrade表中的部分sql脚本:

 

升级数据库的时候比如说53to.43.xx.sqll升级的时候 53代表当前的activiti 版本,54标示需要升级到的版本。选择需要升级的数据库表的sql对应版本即可。

activiti对应的版本信息如下:

 

 

1.1.2. 第二种方式 配置方式

//主要是配置activiti 工作流引擎自定义的一些属性信息。

<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
property name="databaseSchemaUpdate" value="drop-create"></property>
</bean>
<bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
<property name="processEngineConfiguration" ref="processEngineConfiguration" />
</bean>


这里说明一下我们使用的主要的工作流对象是processEngine,从这个对象中获取各个xxxService,processEngine是需要processEngineConfiguration对象中的属性的,就好比你你去找工作,总要把自己的属性提升提升吧,换换衣服,刮刮胡子之类的。

我们接下来重点看一下ProcessEngineImpl中的源码。主要看是数据库创建、删除、更新操作底层是如何实现的。

ProcessEngineImpl继承关系如下图所示:

 

ProcessEngineImpl类的构造方法如下:

public ProcessEngineImpl(ProcessEngineConfigurationImpl processEngineConfiguration) {
...
commandExecutor.execute(processEngineConfiguration.getSchemaCommandConfig(), new SchemaOperationsProcessEngineBuild());
...
}


下面我们重点看一下commandExecutor.execute(processEngineConfiguration.getSchemaCommandConfig(), new SchemaOperationsProcessEngineBuild());方法,这个方法就是进行数据库表的创建、更新以及删除操作。看看这个方法是怎么获取配置文件然后操作数据库的,我们不仅要知道怎么配置,更重要的是知道配置在activiti中是如何解析使用的。

 

//这是一个典型的命令模式,这里我们先看一下这个SchemaOperationsProcessEngineBuild 命令是如何使用的,关于activiti Command 模式我们会在后面的文章详细的讲解

public final class SchemaOperationsProcessEngineBuild implements Command<Object> {
  public Object execute(CommandContext commandContext) {
    commandContext
      .getSession(DbSqlSession.class)
      .performSchemaOperationsProcessEngineBuild();
    return null;
  }
}


下面看一下performSchemaOperationsProcessEngineBuild方法中的操作:

打开类org.activiti.engine.impl.db.DbSqlSession中的performSchemaOperationsProcessEngineBuild方法如下所示:

 public static final String DB_SCHEMA_UPDATE_CREATE = "create";
public static final String DB_SCHEMA_UPDATE_DROP_CREATE = "drop-create";
public void performSchemaOperationsProcessEngineBuild() {
//这个方法就是获取 上面的<bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
property name="databaseSchemaUpdate" value="drop-create"></property>
</bean>中的配置的信息
   默认不配置 是false
String databaseSchemaUpdate = Context.getProcessEngineConfiguration().getDatabaseSchemaUpdate();
//drop-create  删除表重新创建
    if (ProcessEngineConfigurationImpl.DB_SCHEMA_UPDATE_DROP_CREATE.equals(databaseSchemaUpdate)) {
      try {
//删除操作
        dbSchemaDrop();
      } catch (RuntimeException e) {
        // ignore
      }
}
//配置的是 create-drop drop-create create三个中的任意一个
    if ( org.activiti.engine.ProcessEngineConfiguration.DB_SCHEMA_UPDATE_CREATE_DROP.equals(databaseSchemaUpdate)
         || ProcessEngineConfigurationImpl.DB_SCHEMA_UPDATE_DROP_CREATE.equals(databaseSchemaUpdate)
         || ProcessEngineConfigurationImpl.DB_SCHEMA_UPDATE_CREATE.equals(databaseSchemaUpdate)
       ) {
//创建操作
      dbSchemaCreate();
      
    } else if (org.activiti.engine.ProcessEngineConfiguration.DB_SCHEMA_UPDATE_FALSE.equals(databaseSchemaUpdate)) {
//检查版本     
 dbSchemaCheckVersion();
      
} else if (ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE.equals(databaseSchemaUpdate)) {
//设置true就更新操作
      dbSchemaUpdate();
    }
  }


这个时候我们已经很明确参数配置的含义,以及配置参数后引擎的处理。关于activiti 工作流引擎中如何打开数据库操作表、如何更新表,因为这个地方比较负责设计mybstis内容,这个也在后面的章节讲解,然后举一反三的把这个原理也说一下。

最后,我们总结一下两种方式的优缺点:

1.第一种方式最好,sql直接运行,在数据库层面操作,速度比较快。

2.第二种方式,需要配置,是在程序级别操作,肯定还需要打开数据库连接操作,如果打开数据库连接则比较消耗性能。如果自己扩展了activti 工作流的表,可能会引起不必要的麻烦。

3.个人推荐使用第一种直接运行sql的方式进行升级。

相关文章
|
存储 Java 数据库连接
activiti工作流数据库表介绍
activiti工作流数据库表介绍
579 0
|
2月前
|
人工智能 运维 关系型数据库
云栖大会|AI时代的数据库变革升级与实践:Data+AI驱动企业智能新范式
2025云栖大会“AI时代的数据库变革”专场,阿里云瑶池联合B站、小鹏、NVIDIA等分享Data+AI融合实践,发布PolarDB湖库一体化、ApsaraDB Agent等创新成果,全面展现数据库在多模态、智能体、具身智能等场景的技术演进与落地。
|
SQL 关系型数据库 MySQL
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开发指南(8.0版本升级篇)
432 0
|
3月前
|
存储 人工智能 关系型数据库
媒体声音 | 专访阿里云数据库周文超:GenAI时代,数据管理底座强势升级
近日,阿里云数据库产品事业部总监、AnalyticDB PG及生态工具部负责人周文超,在DTCC 2025专访中分享了阿里云瑶池数据库在多模态数据处理、AI基础设施升级等方向的创新实践。
|
8月前
|
存储 XML JSON
Activiti 7 核心数据库表概览及流程生命周期中的作用
Activiti 7 工作流引擎通过约25张核心数据库表实现流程定义、运行时状态、历史记录与身份数据的存储。表名以ACT_开头,后跟标识用途的字母组合(如RE表示Repository静态信息,RU表示Runtime动态数据)。流程启动时在运行时表登记数据,任务执行中更新关联信息,结束时清理运行时记录并完善历史记录。各表分工明确且逻辑紧密关联,确保高效运行与完整留痕的平衡。掌握这些表的作用和关联有助于深入理解Activiti底层原理及进行高级应用开发。
612 0
|
6月前
|
Cloud Native 关系型数据库 分布式数据库
客户说|知乎基于阿里云PolarDB,实现最大数据库集群云原生升级
近日,知乎最大的风控业务数据库集群,基于阿里云瑶池数据库完成了云原生技术架构的升级。此次升级不仅显著提升了系统的高可用性和性能上限,还大幅降低了底层资源成本。
|
6月前
|
存储 关系型数据库 数据库
高性能云盘:一文解析RDS数据库存储架构升级
性能、成本、弹性,是客户实际使用数据库过程中关注的三个重要方面。RDS业界率先推出的高性能云盘(原通用云盘),是PaaS层和IaaS层的深度融合的技术最佳实践,通过使用不同的存储介质,为客户提供同时满足低成本、低延迟、高持久性的体验。
|
9月前
|
数据库
【YashanDB知识库】数据库升级后用yasboot在线扩充备节点出现报错
本文来自YashanDB官网,讨论从22.2.4.1升级至23.2.2.100过程中遇到的在线扩容问题。使用yasboot增加备节点时出现“no replication addr in node 1-1”错误,尽管数据库中存在相关配置。原因是早期托管功能未支持扩容,导致OM无法获取新库配置。提供两种规避方法:一是手动修改`cod_domor.db`信息并调整配置文件;二是手动安装YashanDB并配置备机。最终已向研发反馈,将在扩容时优化配置检查逻辑。
|
8月前
|
人工智能 关系型数据库 分布式数据库
让数据与AI贴得更近,阿里云瑶池数据库系列产品焕新升级
4月9日阿里云AI势能大会上,阿里云瑶池数据库发布重磅新品及一系列产品能力升级。「推理加速服务」Tair KVCache全新上线,实现KVCache动态分层存储,显著提高内存资源利用率,为大模型推理降本提速。
|
Cloud Native 关系型数据库 分布式数据库
《阿里云产品四月刊》—瑶池数据库云原生化和一体化产品能力升级
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
219 1