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出现错误:only buildscript {} and other plugins {} script blocks are allowed before plugins {} blocks...
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的任务列表,如下图所示:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。