当前位置: 首页 > 知识库问答 >
问题:

带Spring靴的 liquibase 更改日志同步

夔庆
2023-03-14

我正在迁移一个由liquibase管理的现有数据库。

我已经有了更新日志。该应用程序是一个Spring启动应用程序,我用液化基芯更新了pom,并设置了Spring液化基属性。

我对一个空数据库进行了测试,运行正常,liquibase在应用程序启动时执行changelog并维护< code>DATABASECHANGELOG表。

现在我面临的问题是数据库已经存在于所有其他环境中,我只想在完成 liquibase 迁移的第一次应用程序运行时,针对这些环境对更改日志进行基线分析。

我知道我需要的是liquibase<code>changelogsync<code>命令,我知道可以执行它的maven插件。

然而,maven插件不是我的首选,因为我不想引入另一个组件,我希望有一种方法可以在应用程序启动时执行< code>changelogsync,就像< code>liquibase-core如何在应用程序启动时执行liqui base 一样,并使用spring应用程序属性来控制它。

我对此做了很多研究,但只使用maven插件找到了答案。

共有2个答案

施彬彬
2023-03-14

您的主题中有两个独立的问题。

  1. 将现有数据库与新的更改日志文件同步。Liquibase不得尝试在现有数据库上运行这些更改,只能在新数据库上运行。
  2. 每次触发liquibase(不仅一次),当应用程序启动时。Liquibase使用DATABASE CHANGELOG表标识,应用了哪些更改。您不需要尝试它只运行一次。

对于第一个问题,您有两个选择:

1.1 使用 changeLogSyncchangeLogSyncSQL。只有当您只有一个客户端时,它才是合理的。

1.2更好的方法,采用新的更改日志文件(每个语句),带有前置条件,例如:

<preConditions onFail="MARK_RAN"><not><tableExists tableName="settings"/></not></preConditions>

使用Liquibase和Spring Boot

将Liquibase与Spring Boot和Maven一起使用

容磊
2023-03-14

下载了< code>liquibase-core的源代码,发现其中已经有帮助器方法来执行< code>changelogsync。

基本上,所有CLI和插件的基础是基于java的liquibase核心模块,因此有公共方法来完成所有可能的任务。它们根本没有暴露在Spring模块中。

我尝试了下面的changelogsync方法,它似乎做了需要做的事情。

 类似资料:
  • 我是一名实习生,我正在尝试学习Liquibase,看看我们是否可以将其用于我们的应用程序。我使用了Git Bash中的Liquibase,没有任何问题(在更新和回滚方面都很好),然后我尝试将Liquibase与Spring Boot项目一起使用,看看是否能够更新数据库。我做到了,我通过Spring Boot创建并更新了db。但接下来我想做一些回滚,但我不能,我不知道该做什么。我试着在Git Bas

  • 所以我的问题是--我如何重构文件结构,而不破坏我的liquibase设置和清空我的数据库?

  • 在生产中,数据库用液基changelog.yaml更新,数据库更新成功。 我们对数据库模式进行了一些更改(作为几个增强功能的一部分),例如创建新表、更改表列和创建约束等。 有没有办法使用最新的数据库架构更改自动更新 changelog.yaml?(需要附加到现有的 YAML 文件中,而不是从 SCRACH 重新创建。 因此对生产过渡数据的影响很小)

  • 在我们的项目中使用gradle-liquibase插件,解决了所有的依赖关系。 我有以下由Gradle liquibase插件建议的liquibase任务: 有关如何解决与类路径相关的问题的帮助吗?

  • 我决定在 Postgresql 的 Java 项目中使用 liquibase,所以我使用 maven goal 创建了初始变更集。现在它正在毫无问题地工作。 我正在寻找的是,在我对数据库进行了更改(比如从RDBMS客户端)之后,是否有任何命令可以分析更改日志和数据库状态,以根据我的更改生成更改集并将其附加到更改集xml文件中?

  • 该项目 为了寻找解决方案,我首先使用maven在执行LiquiBase:Update时将变更日志的SVN修订版存储到中。基于修订版号检索变更日志容易出错。 我已经花了一周的时间来寻找一个健壮的解决方案,在谷歌上搜索了几个小时,构建了几个测试用例(使用了适应的父级和具体的POM,部分使用了maven scm插件等等),但没有运气。最初,我计划使用LiquiBase:tag存储文件路径+修订,但只有当