使用 gradle 和 flyway 插件创建 MySQL 模式

Create MySQL schema with gradle and flyway plugin

我们正在项目中使用 gradle 来构建多存储库项目。由于它是在 Jenkins 构建服务器上自动构建和测试的,因此我们需要设置和拆除数据库。

我对持续集成最佳实践的理解是,我们应该只需按一下按钮即可设置和拆除测试数据库。即使这还不存在。所以我想要一个 gradle 任务,如果它还不存在,它只是在 MySQL 中创建一个数据库。

浏览这个很棒的网站时,我以为我找到了答案,因为我被指向使用 Gradle 的飞路插件。显然 flyway 从 2.1 版开始支持自动模式创建(http://java.dzone.com/announcements/flyway-21-released-automatic),所以应该可以使用插件,不是吗?

但是,如果我 运行 gradle flywayInitgradle flywayClean,每次收到消息 unknown database: test 时都使用 url 之类的 url = 'jdbc:mysql://127.0.0.1:3306/test' .所以我尝试了以下方法:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'org.flywaydb:flyway-gradle-plugin:3.0'
    }
}

// Use Flyway plugin to create database
apply plugin: 'flyway'
flyway {
    user = 'root'
    password = 'root'
    url = 'jdbc:mysql://127.0.0.1:3306'
    schemas = ['test']
}

我本以为会出现另一个连接错误。相反,构建是成功的,但没有创建数据库模式。如何使用 gradle 和 Flyway 创建架构?如果我们不用 Flyway 也能做到,那也很好。

更新: 事实证明这很好用。我正在查看我的数据库模式列表的过时版本。显然 Sequel Pro 太笨了,刷新时不会更新模式列表。还是我太笨了,在 Sequel pro.

里找不到合适的按钮

更新 2: 为了确保在每次构建时始终发生这种情况,我将以下行添加到 build.gradle:

// Add dependencies to tasks
build.dependsOn flywayInit

我关注了Get started with Gradle and Flyway,一切都运行没问题。

我正在使用 gradle 2.2,build.gradle 文件是:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'mysql:mysql-connector-java:5.1.34'
        classpath 'org.flywaydb:flyway-gradle-plugin:3.1'
    }
}

apply plugin: 'flyway'
apply plugin: 'java'

flyway {
    url = 'jdbc:mysql://localhost:3306'
    user = 'root'
    password = 'root'
    schemas = ['demo1']
}

之后,运行 gradle flywayMigrate -i。如果数据库不存在,将由flyway创建。

您可以在此处查看 Flyway 任务列表:link

你所拥有的和 Flyway 可以做的之间有一个微妙但重要的区别:从 2.1 版开始,Flyway 可以创建 模式 ,但不能创建 数据库.

MySQL url 中的名称是您必须使用 MySQL 命令 create database 自行创建的数据库。在该数据库中,Flyway 可以创建您使用 flyway.schemas.

指定的模式