Gradle with Flyway
Flyway 用于管理数据库的版本,它使得数据库可以随着代码的变动而变动,从而让数据库的管理更加方便。Flyway 的使用方式多种多样,本文介绍在 Gradle 使用 Flyway 来管理数据库表。
直接在 build 脚本中配置
flyway {
url = 'jdbc:mysql://localhost:3306?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false'
user = 'myUsr'
password = 'mySecretPwd'
schemas = ['schema1', 'schema2', 'schema3']
// 禁止flywayClean,在生产环境中非常重要
cleanDisabled = true
placeholders = [
'keyABC': 'valueXYZ',
'otherplaceholder': 'value123'
]
// 指定数据库Schema的位置
locations = ['filesystem:com.example.abc.migration/sqls']
}
通过命令行参数
./gradlew -Pflyway.user=myUsr -Pflyway.schemas=schema1,schema2 -Pflyway.placeholders.keyABC=valXYZ
在 gradle.properties 文件配置
flyway.user=myUser
flyway.password=mySecretPwd
flyway.locations=filesystem:com.example.abc.migration/sqls
# List are defined as comma-separated values
flyway.schemas=schema1,schema2,schema3
# Individual placeholders are prefixed by flyway.placeholders.
flyway.placeholders.keyABC=valueXYZ
flyway.placeholders.otherplaceholder=value123
Existing database setup
对于一个已经运行了很长时间的数据库,如何对其设置 Flyway Migration 呢?以MySQL为例,首先运行:
# mysql export schema without data
$ mysqldump -u root -p --no-data dbname > schema.sql
# or
$ mysqldump -u root -p -d dbname > schema.sql
将数据库所有表结构导出到 schema.sql ,然后修改 schema.sql 中各表创建的顺序,使得被依赖(外键)表的位置放在前面,并命名为V1__schema.sql,将此作为 Flyway 的Baseline。
添加参数:
# Only migrations above baselineVersion will then be applied.
flyway.baselineVersion=1
flyway.baselineOnMigration=true
执行(以 Flyway Command Line 方式为例):
./flyway baseline
./flyway migrate
数据库表管理工具还有一个 MyBatis Migrations,在 Gradle 中集成可使用 Gradle Migrations Plugin。
Copyright © 2016-2024 by 赵军旺