1. 当Flowable遇上达梦:一个典型的国产化适配场景
最近在做一个政务项目的技术选型,客户那边明确要求核心系统必须使用国产数据库。我们团队之前一直用Flowable做工作流引擎,MySQL用得好好的,这次要换成达梦数据库,本以为就是改个连接串的事儿,结果一脚踩进了坑里。启动项目的时候,控制台直接抛出一个异常:org.flowable.common.engine.api.FlowableException: couldn’t deduct database type from database product name ‘DM DBMS’。这个报错信息很直白,Flowable根本不认识“DM DBMS”这个数据库产品名,它内置的数据库类型映射里没有达梦这一项。
这其实就是很多开发者在做国产化替代时遇到的第一个拦路虎。像Flowable、Spring Boot这类主流开源框架,其数据库支持列表通常是围绕Oracle、MySQL、PostgreSQL这些国际主流数据库构建的。当我们要接入达梦、金仓、神通等国产数据库时,框架往往无法自动识别,需要我们自己动手“教”它认识新朋友。这个过程不仅仅是换个驱动那么简单,它涉及到框架底层对数据库类型的识别、方言(Dialect)的适配,甚至是数据库迁移工具(如Liquibase)的深度定制。接下来,我就把自己从踩坑到填坑的全过程,以及源码级修改的详细步骤分享出来,希望能帮到同样走在国产化道路上的你。
2. 第一步:引入驱动与基础配置
适配的第一步,也是最简单的一步,就是让我们的项目能够连接到达梦数据库。这需要引入达梦官方的JDBC驱动包。通常,你可以在达梦数据库的安装目录下找到它,比如 dm-connector-java-8.x.x.jar。如果你用的是Maven项目,可以手动将JAR包安装到本地仓库,或者上传到公司的私有仓库,然后在pom.xml中引入。
<dependency>
<groupId>com.dameng</groupId>
<artifactId>dm-connector-java</artifactId>
<version>8.1.1.49</version> <!-- 请替换为你的实际版本 -->
</dependency>
驱动引入后,接下来就是修改应用的数据库连接配置。这里以Spring Boot的application.yml为例:
spring:
datasource:
driver-class-name: dm.jdbc.driver.DmDriver
url: jdbc:dm://localhost:5236/FLOWABLE_DB?schema=FLOWABLE&serverTimezone=Asia/Shanghai
username: FLOWABLE_USER
password: your_password_here
这里有几个关键点需要注意:
- 驱动类:达梦的JDBC驱动类是
dm.jdbc.driver.DmDriver。 - 连接URL:端口默认是5236。
schema参数很重要,达梦的模式(Schema)概念类似于其他数据库的“数据库”,你需要指定一个已存在的模式。 - 时区:建议显式设置
serverTimezone,避免因时区问题导致的时间字段异常。
配置改完先别急着启动,因为此时启动必然会遇到前面提到的“不认识DM DBMS”的报错。我们只是完成了物理连接层面的准备,真正的适配工作才刚刚开始。
3. 核心破解:修改Flowable引擎的数据库类型映射
面对“不认识数据库”的报错,我们的目标是修改Flowable引擎中负责识别数据库类型的核心逻辑。Flowable 6.7.2版本中,这个逻辑位于 flowable-engine-common模块的 org.flowable.common.engine.impl.AbstractEngineConfiguration 类里。
我们不需要去直接修改原始的JAR包,那样做既危险又不利于维护。标准的做法是在自己的项目中,创建完全相同的包路径和类名,然后覆盖需要修改的方法。这样在项目打包时,我们自定义的类会优先于依赖包中的类被加载。
具体操作步骤如下:
-
在项目中创建同名类: 在你的源码目录(如
src/main/java)下,新建包路径org.flowable.com


452

被折叠的 条评论
为什么被折叠?



