Chinaunix首页 | 论坛 | 博客
  • 博客访问: 36141
  • 博文数量: 10
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 100
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-18 14:53
文章分类
文章存档

2016年(10)

我的朋友

分类: Oracle

2016-09-08 18:12:10

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脚本版本信息。后续有更新也会从这张表里面获取当前的数据库版本信息。

阅读(2945) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~