Activiti框架数据库迁移至达梦/人大金仓/海量数据库

可通过修改项目依赖的JAR包完成迁移目的,或者修改获取的Activiti框架的源码后打包为JAR包的方式完成迁移。本迁移指导采用Jar Editor插件对JAR包直接进行修改。

前提条件

Activiti适配达梦数据库

  1. 通过IntelliJ IDEA打开依赖包org.activiti:activiti-engine,通过Jar Editor插件直接对JAR包进行修改。
  2. 找到activiti-engine模块,只需修改两个类和SQL文件。

    1. 修改“org/activiti/engine/impl/cfg/ProcessEngineConfigurationImpl”文件。

      在getDefaultDatabaseTypeMappings()方法中添加如下代码:

      1
      databaseTypeMappings.setProperty("DMDBMS","dm");
      

      通过Jar Editor保存并编译后重新构建JAR包,需要确保JDK版本与Activiti框架适配的JDK版本(JDK11)保持一致。

      部分情况下可能会出现编译错误的情况,可能原因如下:
      • Activiti框架和源码调用的依赖包之间版本不兼容。
      • JDK版本错误。
    2. 修改“org/activiti/engine/impl/db/DbSqlSessionFactory”类,在static块中添加如下代码:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      // dm
      databaseSpecificLimitBeforeStatements.put("dm", "select * from ( select a.*, ROWNUM rnum from (");
      databaseSpecificLimitAfterStatements.put("dm", "  ) a where ROWNUM < #{lastRow}) where rnum  >= #{firstRow}");
      databaseSpecificLimitBetweenStatements.put("dm", "");
      databaseOuterJoinLimitBetweenStatements.put("dm", "");
      databaseSpecificOrderByStatements.put("dm", defaultOrderBy);
      addDatabaseSpecificStatement("dm", "selectExclusiveJobsToExecute", "selectExclusiveJobsToExecute_integerBoolean");
      addDatabaseSpecificStatement("dm", "selectUnlockedTimersByDuedate", "selectUnlockedTimersByDuedate_oracle");
      addDatabaseSpecificStatement("dm", "insertEventLogEntry", "insertEventLogEntry_oracle");
      

      通过Jar Editor保存并编译后重新构建JAR包,需要确保JDK版本与Activiti框架适配的JDK版本(JDK11)保持一致。

    3. 在org/activiti/db中的create、drop和upgrade三个文件夹下,复制Oracle相应SQL文件,把文件名中的oracle修改为dm。

      通过Jar Editor重新构建JAR包,需要确保JDK版本与Activiti框架适配的JDK版本(JDK11)保持一致。

Activiti适配人大金仓数据库

  1. 通过IntelliJ IDEA打开依赖包org.activiti:activiti-engine,通过Jar Editor插件直接对JAR包进行修改。
  2. 找到activiti-engine模块,只需修改两个类和SQL文件。

    1. 修改“org/activiti/engine/impl/cfg/ProcessEngineConfigurationImpl”文件
      在getDefaultDatabaseTypeMappings()方法中添加如下代码:
      1
      databaseTypeMappings.setProperty("KingbaseES","kingbase8");
      

      通过Jar Editor保存并编译后重新构建JAR包,需要确保JDK版本与Activiti框架适配的JDK版本(JDK11)保持一致。

      部分情况下可能会出现编译错误的情况,可能原因如下:
      • Activiti框架和源码调用的依赖包之间版本不兼容。
      • JDK版本错误。
    2. 修改“org/activiti/engine/impl/db/DbSqlSessionFactory”类,在static块中添加如下代码:
      1
      2
      3
      4
      5
      6
      7
      8
      9
      // kingbase
      databaseSpecificLimitBeforeStatements.put("kingbase8", "select * from ( select a.*, ROWNUM rnum from (");
      databaseSpecificLimitAfterStatements.put("kingbase8", "  ) a where ROWNUM < #{lastRow}) where rnum  >= #{firstRow}");
      databaseSpecificLimitBetweenStatements.put("kingbase8", "");
      databaseOuterJoinLimitBetweenStatements.put("kingbase8", "");
      databaseSpecificOrderByStatements.put("kingbase8", defaultOrderBy);
      addDatabaseSpecificStatement("kingbase8", "selectExclusiveJobsToExecute", "selectExclusiveJobsToExecute_integerBoolean");
      addDatabaseSpecificStatement("kingbase8", "selectUnlockedTimersByDuedate", "selectUnlockedTimersByDuedate_oracle");
      addDatabaseSpecificStatement("kingbase8", "insertEventLogEntry", "insertEventLogEntry_oracle");
      

      通过Jar Editor保存并编译后重新构建JAR包,需要确保JDK版本与Activiti框架适配的JDK版本(JDK11)保持一致。

    3. “org/activiti/db”中的create、drop和upgrade三个文件夹下,复制Oracle相应SQL文件,把文件名中的oracle修改为kingbase8。

      通过Jar Editor重新构建JAR包,需要确保JDK版本与Activiti框架适配的JDK版本(JDK11)保持一致。

Activiti适配海量数据库

海量数据库完全兼容MySQL数据库,Activiti框架适配海量数据库,只需要引入MySQL数据库的依赖并在配置文件中修改数据库的相关配置即可完成适配,例如:

修改配置完成后,启动项目。若数据库中生成了相应的数据库表格,则表示适配成功。