鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

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

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

前提条件

  • 建议在IntelliJ IDEA环境下进行,并安装JarEditor插件。
  • 强烈建议在完成数据库迁移或拥有相应完整的表结构之后再进行迁移。

Activiti适配达梦数据库

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

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

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

      通过JarEditor保存并编译后重新构建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");
      

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

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

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

Activiti适配人大金仓数据库

  1. 通过IntelliJ IDEA打开依赖包org.activiti:activiti-engine,通过JarEditor插件直接对JAR包进行修改。
  2. 找到activiti-engine模块,只需修改两个类和SQL文件。
    1. 修改“org/activiti/engine/impl/cfg/ProcessEngineConfigurationImpl”文件
      在getDefaultDatabaseTypeMappings()方法中添加如下代码:
      1
      databaseTypeMappings.setProperty("KingbaseES","kingbase8");
      

      通过JarEditor保存并编译后重新构建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");
      

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

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

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

Activiti适配海量数据库

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

  • 若Activiti集成在Spring Boot项目中,可通过修改下列对应的配置文件的值来完成迁移适配,以YAML文件为例:
    1
    2
    3
    4
    5
    6
    7
    8
    spring.datasource:
      #配置MySQL的数据库驱动
      driver-class-name: com.mysql.cj.jdbc.Driver
      #url中指定数据库类型为mysql
      url: jdbc:mysql://{海量数据库IP地址}:{海量数据库开放端口}/{数据库名}
      #例:jdbc:mysql://127.0.0.1:2881/CamundaProject
      username: {海量数据库用户}
      password: {海量数据库登录的用户密码}
    
  • Activiti框架也可能使用其他类型的配置文件,如下是在activiti.cfg.xml文件中的配置:
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                               http://www.springframework.org/schema/beans/spring-beans.xsd">
     
        <!-- 数据库配置 -->
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
            <property name="driverClassName" value=" com.mysql.cj.jdbc.Driver " />
            <property name="url" value=" jdbc:mysql://{海量数据库IP地址}:{海量数据库开放端口}/{数据库名}" />
            <property name="username" value="{数据库用户名}" />
            <property name="password" value="{数据库用户密码}" />
             <!-- ..其他配置 -->
            <property name=".." value=".." />    
        </bean>
     
             </beans>
     
    

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