news 2026/7/11 20:27:45

flowable兼容达梦数据库

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
flowable兼容达梦数据库

Flowable 6.7.2 + Spring Boot 适配达梦数据库8 实践指南

国产化信创改造过程中,将 Flowable 工作流引擎从 MySQL 迁移到达梦数据库的完整记录。


一、背景

随着信创(国产化)在国内各行业的推进,达梦数据库(Dameng Database,DM8)作为国内主流的国产关系型数据库之一,正在逐步替换 MySQL、Oracle 等国外数据库。

Flowable 作为一款轻量级、可嵌入的工作流引擎,在企业级应用中广泛使用。但 Flowable 官方并未原生支持达梦数据库,因此迁移时需要做一些适配工作。

本文以Spring Boot 2.7.18 + Flowable 6.7.2为例,完整记录适配达梦数据库8 的过程。


二、环境版本

组件版本
Spring Boot2.7.18
Flowable6.7.2
达梦数据库DM8
JDK11
JDBC 驱动DmJdbcDriver18(8.1.3.62)
连接池Druid 1.2.23

三、核心适配原理

Flowable 的数据库方言机制

Flowable 内部使用 MyBatis 作为持久层框架。它通过databaseType属性来切换不同数据库的 SQL 方言,包括:

  • DDL 建表语句(如字段类型、自增主键)
  • 分页查询(如LIMITvsROWNUM
  • ID 生成策略(如AUTO_INCREMENTvsSEQUENCE
  • 日期函数(如NOW()vsSYSDATE

达梦的兼容模式

达梦数据库8 提供了多种兼容模式,最常见的是Oracle 兼容模式。在该模式下,达梦支持:

  • SELECT ... FROM DUAL
  • SYSDATE系统时间函数
  • ROWNUM伪列分页
  • SEQUENCE序列对象
  • PL/SQL 语法子集

核心思路:将 Flowable 的databaseType设为"oracle",利用达梦8 的 Oracle 兼容模式来执行 Flowable 生成的 Oracle 方言 SQL。


四、修改步骤

4.1 替换数据库驱动(pom.xml)

<!-- 移除 MySQL 驱动 --><!-- <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> --><!-- 新增达梦数据库8 JDBC 驱动 --><dependency><groupId>com.dameng</groupId><artifactId>DmJdbcDriver18</artifactId><version>8.1.3.62</version></dependency>

📌 注意:如果 Maven Central 无法直接下载(部分内网环境),需手动安装到本地仓库:

mvn install:install-file\-Dfile=DmJdbcDriver18.jar\-DgroupId=com.dameng\-DartifactId=DmJdbcDriver18\-Dversion=8.1.3.62\-Dpackaging=jar

驱动包可以从达梦数据库安装目录下的drivers/jdbc目录获取。

4.2 修改数据源配置(application.yml)

spring:datasource:type:com.alibaba.druid.pool.DruidDataSource# 达梦数据库8 驱动配置(请确保达梦数据库为 Oracle 兼容模式)driver-class-name:dm.jdbc.driver.DmDriverurl:jdbc:dm://localhost:5236/FLOWABLE_TEST?encoding=UTF-8username:SYSDBApassword:SYSDBAdruid:initial-size:5min-idle:5max-active:10# 达梦 Oracle 兼容模式下的验证查询validation-query:SELECT 1 FROM DUALtest-while-idle:truetest-on-borrow:falsetest-on-return:falsepool-prepared-statements:falsefilters:stat,wallflowable:async-executor-activate:truedatabase-schema-update:true# 首次启动自动建表

4.3 新建 Flowable 达梦方言配置类

packagecom.wk.config;importorg.flowable.spring.boot.ProcessEngineConfigurationConfigurer;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;@ConfigurationpublicclassFlowableDamengConfig{@BeanpublicProcessEngineConfigurationConfigurerdamengProcessEngineConfigurer(){returnconfiguration->{// 告诉 Flowable 使用 Oracle 方言操作达梦(达梦 Oracle 兼容模式)configuration.setDatabaseType("oracle");// 自动建表/更新表结构configuration.setDatabaseSchemaUpdate("true");};}}

五、达梦数据库准备

5.1 创建数据库

使用达梦管理工具(DM Manager)或 SQL 创建:

-- 创建表空间(可选)CREATETABLESPACEFLOWABLE_DATA DATAFILE'FLOWABLE_DATA.DBF'SIZE1024M;-- 创建用户并指定表空间CREATEUSERFLOWABLE_USER IDENTIFIEDBY"password"DEFAULTTABLESPACEFLOWABLE_DATA;-- 授予权限GRANTDBATOFLOWABLE_USER;

5.2 设置 Oracle 兼容模式

达梦8 支持通过dminit初始化参数设置兼容模式,也可以在创建数据库时选择:

  • 兼容模式选Oracle(对应参数COMPATIBLE_MODE=1
  • 字符集选UTF-8
  • VARCHAR 以字符为单位(VARCHAR_TYPE=1,与 Oracle 行为一致)

如果没有在初始化时设置,也可以在建库后通过 SQL 临时设置:

-- 当前会话设置 Oracle 兼容模式SETCOMPATIBLE_MODE=ORACLE;

建议:初始化数据库时就设为 Oracle 兼容模式,避免每次连接都需要手动设置。


六、验证迁移结果

6.1 启动项目

mvn clean spring-boot:run

6.2 观察日志

启动成功后,日志中应能看到 Flowable 自动建表的 SQL 输出:

org.flowable.engine.impl.db.DbSqlSession : performing create on history with resource ... org.flowable.engine.impl.db.DbSqlSession : performing create on ACT_GE_PROPERTY ... ... Flowable 6.7.2 process engine created successfully

6.3 检查数据库表

连接到达梦数据库,执行以下 SQL 确认表已创建:

-- 查看 Flowable 相关的所有表SELECTTABLE_NAMEFROMALL_TABLESWHERETABLE_NAMELIKE'ACT_%'ORDERBYTABLE_NAME;

正常情况应看到类似以下 50+ 张表:

ACT_EVT_LOG ACT_GE_BYTEARRAY ACT_GE_PROPERTY ACT_HI_ACTINST ACT_HI_ATTACHMENT ACT_HI_COMMENT ACT_HI_DETAIL ACT_HI_IDENTITYLINK ACT_HI_PROCINST ACT_HI_TASKINST ACT_HI_VARINST ACT_ID_GROUP ACT_ID_MEMBERSHIP ACT_ID_USER ACT_PROCDEF_INFO ACT_RE_DEPLOYMENT ACT_RE_MODEL ACT_RE_PROCDEF ACT_RU_DEADLETTER_JOB ACT_RU_EVENT_SUBST ACT_RU_EXECUTION ACT_RU_IDENTITYLINK ACT_RU_JOB ACT_RU_SUSPENDED_JOB ACT_RU_TASK ACT_RU_TIMER_JOB ACT_RU_VARIABLE ...

6.4 简单流程测试

部署一个简单的 BPMN 流程定义并启动流程实例,验证读写操作正常:

@AutowiredprivateRuntimeServiceruntimeService;@TestvoidtestStartProcess(){// 部署流程Deploymentdeployment=repositoryService.createDeployment().addClasspathResource("processes/simple-approval.bpmn20.xml").deploy();// 启动流程ProcessInstanceprocessInstance=runtimeService.startProcessInstanceByKey("simpleApproval");Assertions.assertNotNull(processInstance.getId());}

七、常见问题排查

Q1:java.sql.SQLException: 表或视图不存在

原因:Flowable 使用 Oracle 方言执行建表 DDL,但达梦数据库未正确设置 Oracle 兼容模式。

解决:确认达梦数据库已开启 Oracle 兼容模式,或者在连接 URL 中添加参数:

jdbc:dm://localhost:5236/FLOWABLE_TEST?encoding=UTF-8&oracleMode=true

Q2:org.flowable.common.engine.api.FlowableException: couldn't deduct database type

原因:Flowable 无法识别达梦数据库类型,自动检测返回空值。

解决:确认已配置ProcessEngineConfigurationConfigurer并设置了databaseType("oracle")

Q3: 序列ACT_ID_SEQ重复或唯一约束冲突

原因:Flowable 的 Oracle 模式下依赖序列生成 ID,如果表结构中序列未正确创建。

解决:删除所有ACT_表,设置database-schema-update: true重新生成。如仍出问题,可手动创建序列:

CREATESEQUENCE ACT_ID_SEQSTARTWITH1INCREMENTBY1CACHE20;

八、总结

迁移项操作要点
JDBC 驱动DmJdbcDriver18,注意 JDK 版本选择
连接 URLjdbc:dm://host:port/database?encoding=UTF-8
验证查询Oracle 模式用SELECT 1 FROM DUAL
Flowable 方言databaseType = "oracle"(通过配置类编程设置)
达梦设置必须开启 Oracle 兼容模式
连接池Druid 配置中pool-prepared-statements: false

Flowable 通过databaseType切换 SQL 方言这一设计,使得非原生支持的数据库也能通过"方言兼容"的方式平滑迁移。达梦8 的 Oracle 兼容模式在语法覆盖上做得相当成熟,Flowable 在迁移过程中几乎没有遇到 SQL 不兼容的问题——核心工作量只是替换驱动 + 配置数据源 + 声明数据库类型这三步。

当然,如果后续 Flowable 官方能直接支持达梦数据库类型(dm),那将是最完美的方案——不需要借助 Oracle 兼容模式,直接用达梦自身的 SQL 方言和特性。

—效果截图

本文涉及的完整代码已托管在项目仓库中,欢迎参考指正。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/11 20:27:38

工业园区目视化落地

一、工业园区目视化的重要性工业园区是众多企业生产运营的集中区域&#xff0c;其目视化管理具有至关重要的意义。当潜在合作伙伴、客户走进园区&#xff0c;他们的第一印象往往来自于园区的整体环境和视觉呈现。地面是否干净整洁、标识是否清晰明确、功能分区是否合理有序&…

作者头像 李华
网站建设 2026/7/11 20:25:24

10分钟上手CyclOne:从安装到资源池管理的快速入门指南

10分钟上手CyclOne&#xff1a;从安装到资源池管理的快速入门指南 【免费下载链接】CyclOne One-stop resource full-cycle management platform. 项目地址: https://gitcode.com/openeuler/CyclOne 前往项目官网免费下载&#xff1a;https://ar.openeuler.org/ar/ Cyc…

作者头像 李华
网站建设 2026/7/11 20:25:13

您不能错过的 3 种最佳 HTC 数据恢复方法

想必你也有过这样的经历&#xff1a;你的爱人曾因为一些无关紧要的事情和你争吵&#xff0c;但你失去理智&#xff0c;删除了他所有的联系人&#xff0c;之后却后悔莫及&#xff1b;或者你的 HTC 手机存储空间满了&#xff0c;运行速度很慢&#xff0c;你决定释放一些空间&…

作者头像 李华
网站建设 2026/7/11 20:24:23

RAID 0/1/5/10 性能实测:4块 SATA SSD 组阵列,顺序读写速度对比

RAID 0/1/5/10 性能实测&#xff1a;4块 SATA SSD 组阵列顺序读写速度对比测试环境搭建本次测试采用四块容量为1TB的SATA接口固态硬盘&#xff08;型号&#xff1a;三星870 EVO&#xff09;作为基础硬件平台。测试主机配置如下&#xff1a;CPU&#xff1a;Intel Core i7-12700K…

作者头像 李华
网站建设 2026/7/11 20:23:41

如何打造完美的Android电视直播体验:mytv-android完整指南

如何打造完美的Android电视直播体验&#xff1a;mytv-android完整指南 【免费下载链接】mytv-android 使用Android原生开发的电视直播软件 项目地址: https://gitcode.com/gh_mirrors/myt/mytv-android 还在为电视直播画质模糊、频道切换卡顿而困扰&#xff1f;mytv-and…

作者头像 李华
网站建设 2026/7/11 20:22:55

Apollo Save Tool:PS4游戏存档终极管理解决方案

Apollo Save Tool&#xff1a;PS4游戏存档终极管理解决方案 【免费下载链接】apollo-ps4 Apollo Save Tool (PS4) 项目地址: https://gitcode.com/gh_mirrors/ap/apollo-ps4 Apollo Save Tool是一款专为PlayStation 4设计的开源存档管理工具&#xff0c;让玩家能够完全掌…

作者头像 李华