liquibase 扩展适配达梦数据库(dm7)

本文介绍了如何扩展Liquibase以支持达梦数据库DM7,包括适配AbstractJdbcDatabase和LiquibaseDataType,以及处理数据库锁表和日志表的创建,确保在开启Oracle兼容模式下的正常工作。
摘要由CSDN通过智能技术生成

背景

之前因项目客户要求,需要适配国产数据库-达梦(这里适配的是达梦大型通用数据库管理系统,简称DM7),对代码中的sql 改造,同时因为项目中的数据库的建表脚本、字典等都是使用 liquibase 管理的,所以也需要扩展 liquibase 。

在我们的使用中,达梦因为开启了 Oracle 的兼容模式,所以 sql 基本无需改造,但 liquibase 本身不支持达梦数据库,仍需要写代码适配。

注:如果需要搭建本地环境测试或者是体验,可以直接使用 docker 搭建,快速验证下效果,这里使用的是镜像是 flobit/dm7 ,启动命令为 docker run -d --name dm7 -p5236:5236 flobit/dm7,账号密码为 sysdba/strongP@ssW0rd

适配实现

感谢 liquibase 良好的扩展机制,我们一般只需要扩展两点即可:

  1. AbstractJdbcDatabase 声明适配的数据库的元数据、连接的创建等
  2. LiquibaseDataType 声明 java 类型 和数据库字段类型的转换

liquibase版本为 3.5.3.
达梦数据库的依赖如下

<dependency>
    <groupId>com.dameng</groupId>
    <artifactId>Dm7JdbcDriver18</artifactId>
    <version>7.6.0.165</version>
</dependency>
<dependency>
    <groupId>com.dameng</groupId>
    <artifactId>DmDialect-for-hibernate2.0</artifactId>
    <version>8.1.1.49</version>
</dependency>

实现 AbstractJdbcDatabase

笔者一开始为了省事,直接继承 OracleDatabase 然后再复写其中方法,这样会导致的 liquibase 自身的表无法创建成功,也尝试继承 MySqlDatabase ,这样则是导致 liquibase 重复创建 DATABASECHANGELOG 从而失败。(这里挺有意思,后面再展开说说)

正确的做法,应该是直接复制 OracleDatabase 的代码,声明为新类,然后修改其中相关的方法

实现如下

public class DaMengDatabase extends AbstractJdbcDatabase {
   

    public DaMengDatabase() {
   
        super.unquotedObjectsAreUppercased=true;
        super.setCurrentDateTimeFunction("SYSTIMESTAMP");
        // Setting list of Oracle's native functions
        dateFunctions.add(new DatabaseFunction("SYSDATE"));
        dateFunctions.add(new DatabaseFunction("SYSTIMESTAMP"));
        dateFunctions.add(new DatabaseFunction("CURRENT_TIMESTAMP"));
        super.sequenceNextValueFunction = "%s.nextval";
        super.sequenceCurrentValueFunction = "%s.currval";
    }
  
   @Override
   public String getShortName() {
   
       return "dm";
   
Activiti 7对达梦数据库适配需要以下几个步骤: 1. 导入驱动:首先,我们需要将达梦数据库的JDBC驱动程序导入到我们的项目中。可以将驱动程序的JAR文件添加到项目的依赖中,或者手动将驱动程序复制到项目的类路径下。 2. 配置数据源:接下来,我们需要在项目的配置文件中配置达梦数据库的数据源。这包括设置数据库的URL、用户名和密码等信息。根据项目使用的具体框架和技术,这些配置可以在不同的文件中进行设置,比如Spring的配置文件或者应用服务器中的数据源配置。 3. 创建数据库表:在将Activiti 7适配达梦数据库之前,我们需要在数据库中创建所需的Activiti 7表。Activiti 7提供了用于自动创建这些表的脚本,可以从Activiti官方网站上下载。将这些脚本运行在达梦数据库上,即可创建所需的表。 4. 配置Activiti引擎:最后,我们需要在项目的配置文件中配置Activiti引擎以使用达梦数据库。这包括设置Activiti引擎的数据库类型、数据源等信息。根据具体的框架和技术,这些配置可以在不同的文件中进行设置,比如Spring的配置文件或者Activiti的配置文件。 通过以上步骤,我们就可以将Activiti 7适配达梦数据库中,实现与达梦数据库的集成和使用。对于需要使用Activiti 7的工作流引擎,并且数据库选择了达梦的项目来说,这是一个必要的过程,以确保Activiti 7可以在达梦数据库上正常运行和使用。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值