【Camunda】Camunda适配达梦数据库

前言

**

到我文章里面直接下载jar包,就行,别自己改了

https://download.csdn.net/download/dudududuer/87691066?spm=1001.2014.3001.5501

**

1. 修改ProcessEngineConfigurationImpl类的代码

protected static Properties getDefaultDatabaseTypeMappings() {
    Properties databaseTypeMappings = new Properties();
    databaseTypeMappings.setProperty("H2", "h2");
    databaseTypeMappings.setProperty(MY_SQL_PRODUCT_NAME, "mysql");
    databaseTypeMappings.setProperty(MARIA_DB_PRODUCT_NAME, "mariadb");
    databaseTypeMappings.setProperty("Oracle", "oracle");
    databaseTypeMappings.setProperty("PostgreSQL", "postgres");
    databaseTypeMappings.setProperty("Microsoft SQL Server", "mssql");
    databaseTypeMappings.setProperty("DB2", "db2");
    databaseTypeMappings.setProperty("DB2", "db2");
    databaseTypeMappings.setProperty("DB2/NT", "db2");
    databaseTypeMappings.setProperty("DB2/NT64", "db2");
    databaseTypeMappings.setProperty("DB2 UDP", "db2");
    databaseTypeMappings.setProperty("DB2/LINUX", "db2");
    databaseTypeMappings.setProperty("DB2/LINUX390", "db2");
    databaseTypeMappings.setProperty("DB2/LINUXX8664", "db2");
    databaseTypeMappings.setProperty("DB2/LINUXZ64", "db2");
    databaseTypeMappings.setProperty("DB2/400 SQL", "db2");
    databaseTypeMappings.setProperty("DB2/6000", "db2");
    databaseTypeMappings.setProperty("DB2 UDB iSeries", "db2");
    databaseTypeMappings.setProperty("DB2/AIX64", "db2");
    databaseTypeMappings.setProperty("DB2/HPUX", "db2");
    databaseTypeMappings.setProperty("DB2/HP64", "db2");
    databaseTypeMappings.setProperty("DB2/SUN", "db2");
    databaseTypeMappings.setProperty("DB2/SUN64", "db2");
    databaseTypeMappings.setProperty("DB2/PTX", "db2");
    databaseTypeMappings.setProperty("DB2/2", "db2");
    databaseTypeMappings.setProperty("DM DBMS", "dm"); //达梦
    return databaseTypeMappings;
  }

2. 修改DbSqlSessionFactory类代码

public class DbSqlSessionFactory implements SessionFactory {

  public static final String MSSQL = "mssql";
  public static final String DB2 = "db2";
  public static final String ORACLE = "oracle";
  public static final String H2 = "h2";
  public static final String MYSQL = "mysql";
  public static final String POSTGRES = "postgres";
  public static final String MARIADB = "mariadb";
  public static final String DMDBMS = "dm";//达梦数据库
  public static final String[] SUPPORTED_DATABASES = {MSSQL, DB2, ORACLE, H2, MYSQL, POSTGRES, MARIADB, DMDBMS};

关键点:并在static方法里增加:

      databaseSpecificLimitBeforeStatements.put(DMDBMS, "select * from ( select a.*, ROWNUM rnum from (");
        optimizeDatabaseSpecificLimitBeforeWithoutOffsetStatements.put(DMDBMS, "select * from ( select a.*, ROWNUM rnum from (");
        databaseSpecificLimitAfterStatements.put(DMDBMS, "  ) a where ROWNUM < #{lastRow}) where rnum  >= #{firstRow}");
        optimizeDatabaseSpecificLimitAfterWithoutOffsetStatements.put(DMDBMS, "  ) a where ROWNUM <= #{maxResults})");
        databaseSpecificLimitBeforeWithoutOffsetStatements.put(DMDBMS, "");
        databaseSpecificLimitAfterWithoutOffsetStatements.put(DMDBMS, "AND ROWNUM <= #{maxResults}");
        databaseSpecificInnerLimitAfterStatements.put(DMDBMS, databaseSpecificLimitAfterStatements.get(DMDBMS));
        databaseSpecificLimitBetweenStatements.put(DMDBMS, "");
        databaseSpecificLimitBetweenFilterStatements.put(DMDBMS, "");
        databaseSpecificLimitBetweenAcquisitionStatements.put(DMDBMS, "");

        databaseSpecificOrderByStatements.put(DMDBMS, defaultOrderBy);
        databaseSpecificLimitBeforeNativeQueryStatements.put(DMDBMS, "");
        databaseSpecificDistinct.put(DMDBMS, "distinct");

        databaseSpecificNumericCast.put(DMDBMS, "");
        databaseSpecificCountDistinctBeforeStart.put(DMDBMS, defaultDistinctCountBeforeStart);
        databaseSpecificCountDistinctBeforeEnd.put(DMDBMS, defaultDistinctCountBeforeEnd);
        databaseSpecificCountDistinctAfterEnd.put(DMDBMS, defaultDistinctCountAfterEnd);

        databaseSpecificEscapeChar.put(DMDBMS, defaultEscapeChar);

        databaseSpecificDummyTable.put(DMDBMS, "FROM DUAL");
        databaseSpecificBitAnd1.put(DMDBMS, "BITAND(");
        databaseSpecificBitAnd2.put(DMDBMS, ",");
        databaseSpecificBitAnd3.put(DMDBMS, ")");
        databaseSpecificDatepart1.put(DMDBMS, "to_number(to_char(");
        databaseSpecificDatepart2.put(DMDBMS, ",");
        databaseSpecificDatepart3.put(DMDBMS, "))");

        databaseSpecificTrueConstant.put(DMDBMS, "1");
        databaseSpecificFalseConstant.put(DMDBMS, "0");
        databaseSpecificIfNull.put(DMDBMS, "NVL");

        databaseSpecificDaysComparator.put(DMDBMS, "${date} <= #{currentTimestamp} - ${days}");

        databaseSpecificCollationForCaseSensitivity.put(DMDBMS, "");

        addDatabaseSpecificStatement(DMDBMS, "selectHistoricProcessInstanceDurationReport", "selectHistoricProcessInstanceDurationReport_oracle");
        addDatabaseSpecificStatement(DMDBMS, "selectHistoricTaskInstanceDurationReport", "selectHistoricTaskInstanceDurationReport_oracle");
        addDatabaseSpecificStatement(DMDBMS, "selectHistoricTaskInstanceCountByTaskNameReport", "selectHistoricTaskInstanceCountByTaskNameReport_oracle");
        addDatabaseSpecificStatement(DMDBMS, "selectFilterByQueryCriteria", "selectFilterByQueryCriteria_oracleDb2");
        addDatabaseSpecificStatement(DMDBMS, "selectHistoricProcessInstanceIdsForCleanup", "selectHistoricProcessInstanceIdsForCleanup_oracle");
        addDatabaseSpecificStatement(DMDBMS, "selectHistoricDecisionInstanceIdsForCleanup", "selectHistoricDecisionInstanceIdsForCleanup_oracle");
        addDatabaseSpecificStatement(DMDBMS, "selectHistoricCaseInstanceIdsForCleanup", "selectHistoricCaseInstanceIdsForCleanup_oracle");
        addDatabaseSpecificStatement(DMDBMS, "selectHistoricBatchIdsForCleanup", "selectHistoricBatchIdsForCleanup_oracle");

        addDatabaseSpecificStatement(DMDBMS, "deleteAttachmentsByRemovalTime", "deleteAttachmentsByRemovalTime_oracle");
        addDatabaseSpecificStatement(DMDBMS, "deleteCommentsByRemovalTime", "deleteCommentsByRemovalTime_oracle");
        addDatabaseSpecificStatement(DMDBMS, "deleteHistoricActivityInstancesByRemovalTime", "deleteHistoricActivityInstancesByRemovalTime_oracle");
        addDatabaseSpecificStatement(DMDBMS, "deleteHistoricDecisionInputInstancesByRemovalTime", "deleteHistoricDecisionInputInstancesByRemovalTime_oracle");
        addDatabaseSpecificStatement(DMDBMS, "deleteHistoricDecisionInstancesByRemovalTime", "deleteHistoricDecisionInstancesByRemovalTime_oracle");
        addDatabaseSpecificStatement(DMDBMS, "deleteHistoricDecisionOutputInstancesByRemovalTime", "deleteHistoricDecisionOutputInstancesByRemovalTime_oracle");
        addDatabaseSpecificStatement(DMDBMS, "deleteHistoricDetailsByRemovalTime", "deleteHistoricDetailsByRemovalTime_oracle");
        addDatabaseSpecificStatement(DMDBMS, "deleteExternalTaskLogByRemovalTime", "deleteExternalTaskLogByRemovalTime_oracle");
        addDatabaseSpecificStatement(DMDBMS, "deleteHistoricIdentityLinkLogByRemovalTime", "deleteHistoricIdentityLinkLogByRemovalTime_oracle");
        addDatabaseSpecificStatement(DMDBMS, "deleteHistoricIncidentsByRemovalTime", "deleteHistoricIncidentsByRemovalTime_oracle");
        addDatabaseSpecificStatement(DMDBMS, "deleteJobLogByRemovalTime", "deleteJobLogByRemovalTime_oracle");
        addDatabaseSpecificStatement(DMDBMS, "deleteHistoricProcessInstancesByRemovalTime", "deleteHistoricProcessInstancesByRemovalTime_oracle");
        addDatabaseSpecificStatement(DMDBMS, "deleteHistoricTaskInstancesByRemovalTime", "deleteHistoricTaskInstancesByRemovalTime_oracle");
        addDatabaseSpecificStatement(DMDBMS, "deleteHistoricVariableInstancesByRemovalTime", "deleteHistoricVariableInstancesByRemovalTime_oracle");
        addDatabaseSpecificStatement(DMDBMS, "deleteUserOperationLogByRemovalTime", "deleteUserOperationLogByRemovalTime_oracle");
        addDatabaseSpecificStatement(DMDBMS, "deleteByteArraysByRemovalTime", "deleteByteArraysByRemovalTime_oracle");
        addDatabaseSpecificStatement(DMDBMS, "deleteHistoricBatchesByRemovalTime", "deleteHistoricBatchesByRemovalTime_oracle");

        constants = new HashMap<String, String>();
        constants.put("constant.event", "cast('event' as nvarchar2(255))");
        constants.put("constant.op_message", "NEW_VALUE_ || '_|_' || PROPERTY_");
        constants.put("constant_for_update", "for update");
        constants.put("constant.datepart.quarter", "'Q'");
        constants.put("constant.datepart.month", "'MM'");
        constants.put("constant.datepart.minute", "'MI'");
        constants.put("constant.null.startTime", "null START_TIME_");
        constants.put("constant.varchar.cast", "'${key}'");
        constants.put("constant.integer.cast", "NULL");
        constants.put("constant.null.reporter", "NULL AS REPORTER_");
        dbSpecificConstants.put(DMDBMS, constants);

关键在于这个static里面代码,其他文章里面的代码缺失,我这个是完整的,已测试

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
flowable是一个开源的工作流引擎,它基于BPMN 2.0标准,并提供了实现业务流程的功能。达梦数据库是一种国产的数据库管理系统。那么如何将flowable适配达梦数据库呢? 首先,通过flowable的数据库适配器功能,我们可以将flowable连接到达梦数据库。flowable支持自定义数据库配置,可以通过更改配置文件来指定达梦数据库的连接信息,包括数据库类型、地址、用户名和密码等。通过修改相应的配置,我们可以确保flowable能够正确地连接到达梦数据库。 其次,flowable使用了标准的JDBC接口与数据库进行交互。因此,只要达梦数据库提供了JDBC驱动程序,flowable就可以通过该驱动程序与达梦数据库进行通信。可以从达梦官方网站下载并安装达梦数据库的JDBC驱动程序,并将其配置为flowable所需的驱动程序。 最后,我们还需要确保达梦数据库与flowable的数据库结构兼容。在flowable的环境下,数据库中会创建一系列的表和视图来存储流程定义、流程实例、任务、历史记录等信息。我们需要确保这些表和视图在达梦数据库中正确创建,并具有适当的字段和关系。 总结来说,要使flowable适配达梦数据库,我们需要: 1. 修改flowable的数据库配置,以连接到达梦数据库。 2. 安装达梦数据库的JDBC驱动程序,并配置给flowable使用。 3. 确保达梦数据库与flowable的数据库结构兼容。 通过以上的适配工作,我们可以成功地将flowable与达梦数据库进行整合,实现业务流程的管理和执行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值