我们在我们的项目中使用 gradle 来构建一个多存储库项目。由于它是在 Jenkins 构建服务器上自动构建和测试的,因此我们需要设置和拆除数据库。
我对持续集成最佳实践的理解是,我们应该只需按一下按钮即可设置和拆除测试数据库。即使这还不存在。所以我想要一个 gradle 任务,如果它还不存在,它只是在 MySQL 中创建一个数据库。
浏览这个优秀的网站时,我以为我找到了答案,当我被指向使用 Gradle 的 flyway 插件时。显然,flyway 从 2.1 版 ( http://java.dzone.com/announcements/flyway-21-released-automatic ) 开始支持自动模式创建,因此应该可以使用该插件,不是吗?
但是,如果我运行 gradle flywayInit
或 gradle flywayClean
,使用像 url = 'jdbc:mysql://127.0.0.1:3306/这样的 url test'
每次我收到消息 unknown database: 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
关于mysql - 使用 gradle 和 flyway 插件创建 MySQL 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28331851/