2016年(10)
分类: Oracle
2016-09-08 18:12:10
Flyway是一款开源的数据库sql脚本版本管理工具。
它的原理是:在schema中生成一张version表,记录此次更新的sql脚本版本号,保证版本号能和数据库对应起来。
在定义sql脚本名称的时候需要使用如下版本规范:
1、前缀(可配置,默认值:V)
2、版本
3、分隔符(两个下划线)
4、描述(下划线或空格分开)
5、后缀(可配置,默认情况下:SQL)
如:V1_Create_person_table.sql V2_Insert_persons.sql
其中Create_person_table和Insert_persons都是脚本功能的描述
具体集成过程如下:
目录结构和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
加flyway的plugin信息,如下:
切记在pom文件的依赖信息里一定要出现数据库的驱动包:
其中lib目录下放的是flyway的jar包flyway-commandline-4.0-sources.jar
切记:flyway的sql脚本存放目录默认是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上面配置工程了,这里需要注意的只是构建参数:
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 跳过测试用例
还记得配置文件里面有一个参数:
flyway.schemas=qq
在这里用户必须具备创建schema的权限,因此这里给用户授予dba权限:
重新编译执行通过。
由于schema_version是记录数据库版本信息的,因此flyway对其做了保护策略,如果要查看这张表,则必须给表名加双引号,如:select * from "schema_version"
这里说明下:
1.对于schema的构建,在采用jenkins构建的时候flyway先会去检测schema存不存在,不存在创建,存在则跳过。因此建议大家在使用flyway构建前,先创建好schema
2.在写配置文件的时候由于oracle默认的用户名名称都是大写,因此配置文件中的schema也请标注为大写。
可以在数据库里查看生成的schema_version信息:
这张表就记录了数据库的sql脚本版本信息。后续有更新也会从这张表里面获取当前的数据库版本信息。