Flyway管理数据库MySQL5.7入坑记录(一)

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的任务列表,如下图所示:

 

posted @ 2022-08-28 22:20  培轩  阅读(378)  评论(0编辑  收藏  举报