对于数据迁移的概念,相信大家已经都比较熟悉。那么,什么是数据迁移?为什么需要数据迁移?在这里就不再做相关分享啦~。接下来主要分享一下数据迁移工具 Flyway 使用。
Flyway is the Apache v2 licensed open-source tool that makes database migrations easy. It strongly favors simplicity and convention over configuration.
Flyway 是一款开源的数据库迁移工具,它认为简单和约定优于配置。没有繁琐的配置,有 6 个主要基本命令:Migrate, Clean, Info, Validate, Baseline 和 Repair。
Flyway received the highest distinction on the Thoughtworks Technology Radar by being placed in the adopt category.
# 如何使用 Flyway?
Flyway支持很多种和应用集成的方法,这里主要分享一下Gradle集成Flyway的使用。
Setup Repo db-migration-flyway:
$ gradle init --type java-libray
Add Gradle Flyway plugin
1.Change build.gradle file content
buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "gradle.plugin.com.boxfuse.client:flyway-release:4.1.1" }}apply plugin: "idea"apply plugin: 'java'apply plugin: "org.flywaydb.flyway"
2.Build repo
$ ./gradlew build
Config Flyway
1.Change [build.gradle] file content
buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "gradle.plugin.com.boxfuse.client:flyway-release:4.1.1" }}apply plugin: "idea"apply plugin: 'java'apply plugin: "org.flywaydb.flyway"flyway { driver = 'com.mysql.jdbc.Driver' url = "jdbc:mysql://127.0.0.1:3306/flyway_dev" user = 'mysql' password = 'mysql' table = 'flyway_dev_schema_version' locations = ["filesystem:${projectDir}/src/main/resources/db/migration/mysql"] sqlMigrationPrefix = 'MySQL-'}repositories { jcenter()}dependencies { compile 'mysql:mysql-connector-java:5.1.34'}
2.Build repo
$ ./gradlew build
Add Migration Scripts
1.Create file MySQL-1_1__create_users_table.sql
CREATE TABLE USERS ( ID BIGINT PRIMARY KEY AUTO_INCREMENT, USERNAME VARCHAR(32) NOT NULL UNIQUE, CREATED_AT TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3));
2.Create Mysql Database flyway_dev with user mysql and password mysql
3 Migration
$ ./gradlew flywayMigrate -i
# 配置管理
对于DEV、QA、TEST、STAGE、PROD针对不同的环境,需要会使用不一样的数据库配置。
1.在工程目录下创建文件config/dev/db.properties, config/test/db.properties, config/prod/db.properties:
// config/dev/db.propertiesdb.url=jdbc:mysql://127.0.0.1:3306/flyway_devdb.user=mysqldb.password=mysql// config/test/db.propertiesdb.url=jdbc:mysql://127.0.0.1:3306/flyway_testdb.user=mysqldb.password=mysql// config/prod/db.propertiesdb.url=jdbc:mysql://127.0.0.1:3306/flyway_proddb.user=mysqldb.password=mysql
2.修改 build.gradle 文件
buildscript { repositories { maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "gradle.plugin.com.boxfuse.client:flyway-release:4.1.1" }}apply plugin: "idea"apply plugin: 'java'apply plugin: "org.flywaydb.flyway"def properties = new Properties()properties.load(project.file("config/${env}/db.properties").newReader())flyway { driver = 'com.mysql.jdbc.Driver' url = properties.get('db.url') user = properties.get('db.user') password = properties.get('db.password') table = 'flyway_dev_schema_version' locations = ["filesystem:${projectDir}/src/main/resources/db/migration/mysql"] sqlMigrationPrefix = 'MySQL-'}repositories { jcenter()}dependencies { compile 'mysql:mysql-connector-java:5.1.34'}
3.Create Mysql Database flyway_test with user mysql and password mysql
4.Migration test env
$ ./gradlew -Penv=test flywayMigrate -i
# 写在最后
这里只是简单的分享了一下,Gradle 和 Flyway 的集成。Flyway 还有很多功能值得去探索…
来源:http://aikin.me/2017/02/26/db-migration-flyway/
往期推荐
?
自从用完Gradle后,有点嫌弃Maven了!速度贼快! Dubbo 高危反序列化漏洞,存在远程代码执行风险,建议及时升级到2.7.7或更高版本! MATLAB被禁,国产开发要多久?
点击