flyway-4.2适配DM8数据库

Flyway介绍

功能简介

Flyway 是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式。Flyway 可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,不需要复杂的配置,Migrations 可以写成 SQL 脚本,也可以写在 Java 代码中,不仅支持 Command Line 和 Java API,还支持 Build 构建工具和 Spring Boot 等,同时在分布式环境下能够安全可靠地升级数据库。

个人观点:该插件实现了对数据库表结构以及字典数据的版本维护,开发人员只需提供一套 SQL 语句脚本,实施人员通过 flyway 一键更新,无需关心执行顺序,只要相关数据与开发环境一致,一定不会发生任何报错。适用于同一程序多地进行部署场景,可有效避免在版本迭代过程中由于人工误操作造成的各种问题。但也缺乏一定智能性,无法识别人工修改导致的冲突,无法识别数据变化。

目前越来越多使用到flyway的项目开始替换为达梦数据库,本文简单介绍flyway与达梦数据库之间的适配。

官方网站

https://flywaydb.org/

历史版本及帮助文档下载

https://repo1.maven.org/maven2/org/flywaydb/

Command line方式连接数据库

环境信息

序号项目版本
1操作系统redhat 6.8
2flyway4.2.0
3数据库DM V8
4JDK1.8

配置步骤

解压压缩包

tar xvzf flyway-commandline-4.2.0.tar.gz

进入flyway-4.2.0目录

cd flyway-4.2.0
  • 文件夹介绍
    • conf :存放flyway.conf配置文件,通过jdbc方式配置数据库连接
    • drivers:存放数据库jdbc驱动
    • sql:存放数据库元数据sql脚本

配置jdbc连接(将DmJdbcDriver.jar放入drivers文件夹)

vi conf/flyway.conf
#jdbc连接串
flyway.url= jdbc:dm://127.0.0.1?comOracle=true
#数据库驱动类名
flyway.driver= dm.jdbc.driver.DmDriver
#数据库登录用户(用户名密码可不配置,连接时输入)
flyway.user=
#用户密码
flyway.password=

在sql文件夹下创建初始版本(版本命名规则为固定用法,【V1_1__具体文件名】)

vi V1_1__Create_person_table.sql
create table PERSON (
    ID int not null,
    NAME varchar(100) not null
);

初始化版本控制表

./flyway migrate -baselineOnMigrate=true

flyway适配DM
schema_version-DM
版本控制表schema_version初始化完成

执行已创建好的sql脚本

./flyway migrate

flywayDMflywayDM

可在数据库中看到脚本中的person表创建成功,且版本记录表中增加1.1版本执行记录

其它

适配过程

flywayDM
初次进行连接测试时,结果如上图所示,提示不支持的数据库

ERROR: Unsupported Database: DM DBMS 8.1
适配方式一:修改url连接配置,增加Oracle兼容参数

配置文件修改如下

#jdbc连接串  增加了comOracle=true参数适配oracle
flyway.url= jdbc:dm://127.0.0.1?comOracle=true

再次连接测试,flyway识别数据库类别为Oracle,可成功连接。在这里插入图片描述

适配方式二:修改源码增加对DM数据库的支持

将jar包反编译,并根据报错内容 Unsupported Database作为关键字在代码中进行搜索。
flywayDM
成功找到对应类,查看相关数据库类别判断逻辑
flywayDM
可以看出此处依次对各类数据库种类进行判断,不在范围内返回 Unsupported Database 报错。

由于 DM 高度兼容 Oracle,此处选取 Oracle 的适配类进行分析。
flywayDM
可看出对应方法中,实现了获取用户、模式等数据库基本信息的查询。通过测试其中语句不需做任何修改即可在 DM 中执行成功。
flywayDM

修改判断逻辑,将 DM 的适配逻辑改为与 Oracle 一致。
在这里插入图片描述
将修改好的java文件编译对应class文件

javac -cp D:\flyway-core-4.2.0.jar D:\DbSupportFactory.java

将 class 文件替换 jar 包内原文件。

再次测试连接:
flywayDM
可正常识别 DM DBMS,完美适配!

配置文件加密

目前越来越多的项目提高了对安全性的要求,将明文密码暴露在配置文件中存在一定安全风险。flyway自身暂不支持密码加密,但可通过第三方软件 gpg 实现对配置文件的加密处理,该方式也是flyway官方推荐的加密方式。详细使用说明可参考

flyway配置文件加密

报错以及回滚问题

flyway为版本控制工具,对于sql是否存在语法错误以及能否执行成功不做校验。且无法实现自动回滚,如需回滚需要通过sql方式修改为之前配置。

报错演示:
手动在数据库中对Person表创建主键。

alter table person add constraint pk_person primary key (id);

再通过版本控制重复创建主键

vi V1_2__Add_person_pk.sql

重复上述创建主键sql。

执行版本迁移
在这里插入图片描述
执行后有报错提示,提示进行回滚,且版本信息表中标记该版本执行不成功。
在这里插入图片描述
回滚操作介绍:

当前演示版本4.2.0中不支持回滚操作,但在最新版本中已提供回滚操作。
官方undo功能介绍:flyway回滚功能介绍.

所谓回滚操作,本质需要依赖用户编写的脚本实现当前版本变更的逆操作。如果在数据库实际使用过程中进行的一些破坏性的操作(比如 drop, delete, truncate, …),那么 undo 命令实际上很难去实现用户实际的操作目标,undo 最主要的目的是作用于一些可控的情况,如表结构的变更、约束条件变更等。实际生产应用环境中应尽量避免用到flyway的undo功能。

本例中如需实现回滚,可在版本控制表中删除执行失败记录,并手动在数据库中删除主键。

更多内容请访问达梦技术社区 https://eco.dameng.com

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
根据提供的引用内容,可以得知flyway是一个数据库版本管理工具,可以帮助开发人员更好地管理数据库的版本。而flyway-mysql则是flyway针对MySQL数据库的一个插件,可以帮助开发人员更好地管理MySQL数据库的版本。 要使用flyway-mysql,需要按照以下步骤进行操作: 1. 在pom文件中添加flyway和MySQL的驱动依赖,如下所示: ```xml <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> <version>5.2.4</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.21</version> </dependency> ``` 需要注意的是,flyway的版本和spring boot的版本需要兼容,否则会出现异常。 2. 在application.properties文件中配置MySQL数据库的连接信息,如下所示: ```properties spring.datasource.url=jdbc:mysql://127.0.0.1/resty-demo?useUnicode=true&characterEncoding=UTF-8 spring.datasource.username=dev spring.datasource.password=dev1010 ``` 3. 在resources目录下创建db/migration目录,并在该目录下创建SQL脚本文件,如下所示: ```sql V1__create_user_table.sql CREATE TABLE user ( id INT PRIMARY KEY, name VARCHAR(50), age INT ); ``` 其中,V1__create_user_table.sql是一个版本号为1的SQL脚本文件,用于创建user表。 4. 在启动类上添加@EnableFlyway注解,如下所示: ```java @SpringBootApplication @EnableFlyway public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 5. 启动应用程序,flyway会自动检测db/migration目录下的SQL脚本文件,并执行其中的SQL语句,创建数据库表。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值