Camunda 适配国产数据库达梦(DM8)完整教程

  • Camunda
  • 达梦数据库
  • 流程引擎
  • 国产化适配
    categories:
  • 工作流引擎
  • 数据库适配

适用于 Camunda 7.x + 达梦 DM8 的国产化适配实践经验,汇总各大平台参考资料,结合实测环境给出完整解决方案。


💥 问题背景

在国产适配过程中,Camunda 默认无法识别达梦数据库(DM DBMS),并会抛出类似如下异常:

couldn't deduct database type from database product name 'DM DBMS': databaseType is null

或者:

ENGINE-03089 Batching not supported: The jdbc driver in use does not return the number of affected rows when executing statement batches.

🔧 解决方案对比

方案 场景 成本 是否推荐
A. 修改源码/JAR 支持 dm 希望彻底兼容达梦语法 中等 ✅ 推荐(长期)
B. 配置数据库类型为 oracle 快速上线 ⚠️ 有兼容性风险
C. 设置 URL 兼容 + 禁用批处理 临时解决 batching 错误 ✅ 推荐(临时)

🛠️ 方案 A:打补丁支持 dm

适合公司可维护 Camunda 引擎 JAR 包的情况

修改入口一:ProcessEngineConfigurationImpl.java

databaseTypeMappings.setProperty("DM DBMS", "dm");

修改入口二:DbSqlSessionFactory.java

public static final String DMDBMS = "dm";

databaseSpecificLimitBeforeStatements.put(DMDBMS,
  "select * from ( select a.*, ROWNUM rnum from (");
...
databaseSpecificFalseConstant.put(DMDBMS, "0");

构建说明

  1. 使用 JarTool 或 Maven 打开并修改 camunda-engine-7.x.x.jar
  2. 重新打包替换依赖
  3. 或 fork 官方源码重构并构建私有版本

⚙️ 方案 B:配置 database.type=oracle

无需改代码,只需要:

camunda:
  bpm:
    database:
      type: oracle

spring:
  datasource:
    driver-class-name: dm.jdbc.driver.DmDriver
    url: jdbc:dm://127.0.0.1:5236/xxxx
    username: xxx
    password: xxx

此模式依赖达梦的 Oracle 兼容模式,Camunda 会用 Oracle 方言执行 SQL。


🚫 遇到 Batching 报错?

出现:

ENGINE-03089 Batching not supported: The jdbc driver in use does not return the number of affected rows...

说明你使用了:

jdbc:dm://127.0.0.1:5236/xxxx?compatibleMode=oracle

此时 达梦 JDBC 在 Oracle 模式下不返回批处理结果,Camunda 报错。


✅ 方案 C:兼容模式 + 关闭批处理 (不推荐,各种问题)

  1. URL 使用 Oracle 模式:

    jdbc:dm://127.0.0.1:5236/xxxx?compatibleMode=oracle
    
  2. 禁用 Camunda 批处理:

    camunda.bpm.jdbcBatchProcessing=false
    

重启即可避免此类错误。


✅ 验证方法

SELECT BANNER FROM V$VERSION;

控制台应打印:

Database Product Name: DM DBMS
Database Type: dm     (或 oracle)

并且流程启动、任务签收等不再报错。


🧭 常见问题排查

问题 解决方案
databaseType is null 修改 Camunda 源码或配置为 oracle
batching not supported 关闭 Camunda 的 JDBC 批处理
无法建表 使用 oracle 类型初始化数据库,再切换
ORA-00942 确认兼容模式开启、用户权限完整

📚 参考资料


Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐