Flyway是一款开源的数据库版本管理工具,它更倾向于规约优于配置的方式。Flyway可以独立于应用实现管理并跟踪数据库变更,支持数据库版本自动升级,并且有一套默认的规约,不需要复杂的配置,Migrations可以写成SQL脚本,也可以写在Java代码中,不仅支持Command Line和Java API,还支持Build构建工具和Spring Boot等,同时在分布式环境下能够安全可靠地升级数据库,同时也支持失败恢复等。
下面主要记录Flyway作为Gradle插件使用时遇到的问题。
访问Flyway网站上的文档,找到首次使用Gradle插件的方式:https://flywaydb.org/documentation/getstarted/firststeps/gradle
buildscript { dependencies { classpath 'com.h2database:h2:1.4.197' } } plugins { id "org.flywaydb.flyway" version "9.2.0" } flyway { url = 'jdbc:h2:file:./target/foobar' user = 'sa' }
示例给出的是HSQL数据库的配置方式,于是将其它改为MySQL,我的build.gradle配置文件内容如下:
apply from: 'config.gradle' buildscript { ext { springBootVersion = '2.5.13' FAST_MIRROR_REPO_URL = 'https://maven.aliyun.com/nexus/content/groups/public/' } repositories { maven { url FAST_MIRROR_REPO_URL } mavenCentral() } dependencies { classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}" classpath 'mysql:mysql-connector-java:8.0.29' } } plugins { id "org.flywaydb.flyway" version "9.2.0" } flyway { url = 'jdbc:mysql://localhost:3306/jeesite4?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai' user = 'root' password = 'root' locations = ['filesystem:db/migration'] }
Gradle长时间不用只记得简单的用法,这个错误没有遇到过,当前Gradle的版本是7.0,难道是升级带来的问题,不想降低版本解决这个问题,通过分析出错信息发现在plugins{}块之前,只允许buildscript{}和其他插件{}脚本块,不允许其他语句。又上网查了一下,知道build.grade的插件配置有两种形式plugins(id 'java')和apply plugin:'java',配置插件的时候用plugins{}的格式的时候,如果位置不对的话会报这个错误。plugins{}必须放在buildscript{}之后或者其他的plugins{}的后边,报这个错误是因为plugins{}的前面我多加了个语句 apply from: 'config.gradle',重新调整build.gradle脚本,具体内容如下:
buildscript { ext { springBootVersion = '2.5.13' FAST_MIRROR_REPO_URL = 'https://maven.aliyun.com/nexus/content/groups/public/' } repositories { maven { url FAST_MIRROR_REPO_URL } mavenCentral() } dependencies { classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}" classpath 'mysql:mysql-connector-java:8.0.29' } } plugins { id "org.flywaydb.flyway" version "9.2.0" } flyway { url = 'jdbc:mysql://localhost:3306/jeesite4?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai' user = 'root' password = 'root' locations = ['filesystem:db/migration'] } apply from: 'config.gradle'
至此build.gradle脚本重新载入不再出错,可以正常使用了,在IDEA的Gradle的任务面板中还出现Flyway的任务列表,如下图所示: