无法与liquibase gradle插件产生差异

Haz*_*zim 8 mysql changeset liquibase gradle spring-boot

我正在尝试使用MYSQL数据库在现有的SpringBoot项目中实现liquibase.我希望能够生成更改集,指定实体更改时的差异.

我做了什么:

我在我的build.gradle文件中添加了liquibase依赖项和gradle liquibase插件.进行域名更改后,我就跑了gradle generateChangeLog.该命令执行成功但没有任何反应.

我在某地读过这个gradle插件只适用于内存h2数据库?真的吗?如果是,那么我应该使用什么替代方案自动生成更改日志.

我找不到一个有效的SpringBoot基于gradle的示例,该示例使用MYSQL并且已实现具有自动更改生成功能的liquibase.如果有人可以提供,那就太好了.

参考文献:

https://github.com/stevesaliman/liquibase-workshop

https://github.com/liquibase/liquibase-gradle-plugin

Haz*_*zim 19

解决方案是编写一个调用的gradle任务 liquibase diffChangeLog

liquibase.gradle在项目根目录中创建一个文件,添加liquibase-hibernate扩展并编写一个调用该liquibase diffChangeLog命令的gradle任务.

configurations {
  liquibase
}

dependencies {
  liquibase group: 'org.liquibase.ext', name: 'liquibase-hibernate4', version: 3.5
}

//loading properties file.
Properties liquibaseProps = new Properties()
liquibaseProps.load(new FileInputStream("src/main/resources/liquibase-task.properties"))

Properties applicationProps = new Properties()
applicationProps.load(new FileInputStream("src/main/resources/application.properties"))

task liquibaseDiffChangelog(type: JavaExec) {
  group = "liquibase"


  classpath sourceSets.main.runtimeClasspath
  classpath configurations.liquibase
  main = "liquibase.integration.commandline.Main"

  args "--changeLogFile=" + liquibaseProps.getProperty('liquibase.changelog.path')+ buildTimestamp() +"_changelog.xml"
  args "--referenceUrl=hibernate:spring:" + liquibaseProps.getProperty('liquibase.domain.package') + "?dialect=" + applicationProps.getProperty('spring.jpa.properties.hibernate.dialect')
  args "--username=" + applicationProps.getProperty('spring.datasource.username')
  args "--password=" + applicationProps.getProperty('spring.datasource.password')
  args "--url=" + applicationProps.getProperty('spring.datasource.url')
  args "--driver=com.mysql.jdbc.Driver"
  args "diffChangeLog"
}

def buildTimestamp() {
  def date = new Date()
  def formattedDate = date.format('yyyyMMddHHmmss')
  return formattedDate
}
Run Code Online (Sandbox Code Playgroud)

注意:我已经使用属性文件将参数传递给liquibase命令,您可以直接添加值,但这不是一个好习惯.

接下来,您需要liquibase.gradle从项目的build.gradle文件中应用该文件.并添加liquibase依赖项

apply from: 'liquibase.gradle'
//code omitted
dependencies {
    compile (group: 'org.liquibase', name: 'liquibase-core', version: "3.4.2")
}
Run Code Online (Sandbox Code Playgroud)

在此步骤之后,将完全设置liquibase.

您现在可以使用它gradle liquibaseDiffChangeLog来生成更改日志.

  • `无法在类型为org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler的对象上找到参数[{group = org.liquibase.ext,name = liquibase-hibernate4,version = 3.5}]的方法liquibase() .`错误就像可以解决但如何? (4认同)

Sve*_*ort 6

通过以下设置,它可以与liquibase-hibernateliquibase-gradle扩展一起使用:

plugins {
    id 'org.liquibase.gradle' version '2.0.1'
}

dependencies {
    implementation 'org.liquibase:liquibase-core:3.8.0'

    liquibaseRuntime 'org.liquibase.ext:liquibase-hibernate5:3.8'
    liquibaseRuntime sourceSets.main.runtimeClasspath
    liquibaseRuntime sourceSets.main.output
}

def props = new Properties()
file("src/main/resources/liquibase.properties").withInputStream { props.load(it) }

diff.dependsOn assemble
diffChangeLog.dependsOn assemble

liquibase {
    activities {
        main {
            changeLogFile props.getProperty("liquibase.changelog.main")
            referenceUrl props.getProperty("liquibase.changelog.referenceUrl")
            url props.getProperty("spring.datasource.url")
            username props.getProperty("spring.datasource.username")
            password props.getProperty("spring.datasource.password")
            referenceDriver "liquibase.ext.hibernate.database.connection.HibernateDriver"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这将在指定的变更日志文件中生成变更日志。您可以首先使用 生成初始更改日志gradle generateChangelog,运行应用程序以将这些更改应用到数据库,然后在实体模型中的每次更改之后运行任务gradle diffChangelog以在 chanlog 文件中获取这些更改。然后,在再次运行任务之前,应将这些应用到数据库,diffChangeLog以防止更改日志中出现重复操作。

为此,您需要以下属性liquibase.properties

liquibase.changelog.main=src/main/resources/db/changelog/db.changelog-master.xml
liquibase.changelog.classpath=classpath:db/changelog/db.changelog-master.xml
liquibase.changelog.referenceUrl=hibernate:spring:<MODEL_PACKAGE>?dialect=org.hibernate.dialect.MySQL5Dialect
Run Code Online (Sandbox Code Playgroud)

重要提示:请务必更换<MODEL_PACKAGE>为您的休眠模型所在的软件包。