我们在项目中使用gradle来构建一个多存储库项目。由于它是在Jenkins构建服务器上自动构建和测试的,因此我们需要设置和拆除数据库。
我对持续集成最佳实践的理解是,我们只需按一下按钮即可设置和拆除测试数据库。即使这还不存在。所以我想要一个gradle任务,如果它还不存在,只需在MySQL中创建一个数据库。
当我指向使用Gradle的flyway插件时,浏览这个好网站我以为我找到了答案。从版本2.1(http://java.dzone.com/announcements/flyway-21-released-automatic)开始,flyway确实支持自动模式创建,所以应该可以使用插件,如果不是的话?
但是,如果我运行gradle flywayInit
或gradle flywayClean
,则每次收到消息url = 'jdbc:mysql://127.0.0.1:3306/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
答案 0 :(得分:5)
我跟着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
答案 1 :(得分:0)
你在那里和Flyway可以做的事情之间有一个微妙但重要的区别:因为版本2.1 Flyway可以创建架构,但不能创建数据库。
MySQL url中的名称是您必须使用MySQL命令create database
自行创建的数据库。在该数据库中,Flyway可以使用flyway.schemas
创建您指定的模式。