欢迎光临
我们一直在努力

flyway,maven,oracle集成记录

Flyway功能以及sql命名规范介绍

Flyway是一款开源的数据库sql脚本版本管理工具。
它的原理是:在schema中生成一张version表,记录此次更新的sql脚本版本号,保证版本号能和数据库对应起来。
在定义sql脚本名称的时候需要使用如下版本规范:
1
、前缀(可配置,默认值:V
2
、版本
3
、分隔符(两个下划线)
4
、描述(下划线或空格分开)
5
、后缀(可配置,默认情况下:SQL
如:V1_Create_person_table.sql V2_Insert_persons.sql
其中Create_person_tableInsert_persons都是脚本功能的描述

Flyway目录结构以及配置介绍

具体集成过程如下:
目录结构和maven的目录结构一致,如下:

可以看到和src同级目录有一个flyway的配置文件和工程的pom文件。
配置文件flyway.properties内容如下,主要配置的都是一些数据库的连接信息.一目了然:

flyway.driver=oracle.jdbc.OracleDriver
flyway.url=jdbc:oracle:thin:@192.168.2.200:1521/orcl
flyway.user=qq
flyway.password=qq
flyway.schemas=FLYWAY
flyway_table=qq_version
flyway.placeholders.keyABC=valueXYZ
flyway.placeholders.otherplaceholder=value123

flywayplugin信息,如下:

切记在pom文件的依赖信息里一定要出现数据库的驱动包:

其中lib目录下放的是flywayjarflyway-commandline-4.0-sources.jar
切记:flywaysql脚本存放目录默认是resources/db/ migration
可以看到在migration目录下我有两个脚本,脚本如下:
V1__Create_person_table.sql

create table PERSON (
NAME varchar(80) not null
);
V2__Insert_persons.sql

INSERT INTO PERSON (NAME) VALUES (‘Peter Meyer’);
INSERT INTO PERSON (NAME) VALUES (‘Peter Bonnd’);
INSERT INTO PERSON (NAME) VALUES (‘Klara Korn’);

Jenkins工程配置介绍

配置完成之后,需要在jenkins上面配置工程了,这里需要注意的只是构建参数:
mvn flyway:init
(初始化Flyway metadata
mvn flyway:migrate
(执行Flyway 升级操作)
mvn flyway:validate
(校验Flyway 数据正确性)
如下,是我的构建参数:
-X -Dflyway.configFile=flyway.properties flyway:migrate -Dmaven.test.skip=true
参数介绍:-X debug级别构建,打印详细的构建过程
-Dflyway.configFile=
指定对应的flyway配置文件
-Dmaven.test.skip=true
跳过测试用例

常见错误分析

1.构建失败,create schema没权限


还记得配置文件里面有一个参数:
flyway.schemas=qq
在这里用户必须具备创建schema的权限,因此这里给用户授予dba权限:

重新编译执行通过。

2.构建之后找不到生成的表:


由于schema_version是记录数据库版本信息的,因此flyway对其做了保护策略,如果要查看这张表,则必须给表名加双引号,如:select * from “schema_version”

这里说明下:

1.对于schema的构建,在采用jenkins构建的时候flyway先会去检测schema存不存在,不存在创建,存在则跳过。因此建议大家在使用flyway构建前,先创建好schema

2.在写配置文件的时候由于oracle默认的用户名名称都是大写,因此配置文件中的schema也请标注为大写。

构建结果查看


可以在数据库里查看生成的schema_version信息:

这张表就记录了数据库的sql脚本版本信息。后续有更新也会从这张表里面获取当前的数据库版本信息。

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。